1、PANDAS进行数据清洗
例如:
import pandas as pd
df = pd.read_csv(“customer.csv”)

df.loc[(df[“age”] > 120) | (df[“age”]<0 ), “age”] = None

print(“After removing outliers:”)
print(df)

median = df[“age”].median()
print(median)

df[“age”] = df[“age”].fillna(median)

df[“age”] = df[“age”].astype(int)

df[“sex”] = df[“sex”].str.strip().str.lower().map(
{“m”: “男”, “male”: “男”, “f”: “女”, “female”: “女”, “男”: “男”, “女”: “女”}
).fillna(“未知”)

for i in range(len(df)):
if pd.isnull(df.loc[i,“city”]) or df.loc[i,“city”].strip() ==“”:
df.loc[i,“city”] = “未知”
else:
city = df.loc[i,“city”]
print(city)
df.loc[i,“city”] = city.strip()
print(df)

客户总数

print(“客户总数:”, len(df))

平均年龄

print(“平均年龄:”, df[“age”].mean())

#最大年龄
print(“最大年龄:”, df[“age”].max())

#最小年龄
print(“最小年龄:”, df[“age”].min())

#男性客户数量
dfnan = df.loc[df[“sex”] == “男”,[“sex”,“age”]]
print(dfnan)

print(“男性客户数量:”, df[df[“sex”] == “男”].shape[0])

#女性客户数量
print(“女性客户数量:”, df[df[“sex”] == “女”].shape[0])
#未知性别客户数量
print(“未知性别客户数量:”, df[df[“sex”] == “未知”].shape[0])

dfcity = df[“city”].value_counts()
print(“各城市客户数量:”)
print(dfcity)
for city, count in dfcity.items():
print(f"{city}: {count}")

#客户数量最多的城市
max_customers_city = dfcity.idxmax()
print(“客户数量最多的城市:”, max_customers_city)

df.to_csv(“customer_cleaned.csv”, index=False)

2、主要考点
1、idxmax
idxmax() 是 pandas 的方法,返回最大值对应的索引(index),而不是最大值本身。

例:

dfcity = df["city"].value_counts()
# 结果类似:
# 未知        2
# hangzhou    1
# nanjing     1
# beijing     1
# shanghai    1

dfcity.idxmax()   # 返回 '未知'(数量 2 对应的城市名)
dfcity.max()      # 返回 2(最大值本身)

对比一下:

方法返回
max()最大值(2)
idxmax()最大值的索引(‘未知’)
argmax()最大值的位置(0,整数下标)

所以 dfcity.idxmax() 就是"客户数量最多的城市"。

⚠️ 注意:如果有多个城市并列最多,idxmax() 只返回第一个出现的。

2, items 获取Serial 键名和值的获取
serial1 = pd.Serial({“hangzhou”:2,“nanjing”:1})
for city,count in serial1.items():
print(f"{city} : {count}")
注意:不能写成:
for city,count in serial1:

更多推荐