file = 'F:\\数据分析数据\\lianjia.csv'
f = open(file,'r',encoding='utf-8',errors='ignore')
df = pd.read_csv(f)
print(df) #只粘贴了部分数据
Direction District Elevator Floor ... Region Renovation Size Year
0 东西 灯市口 NaN 6 ... 东城 精装 75.0 1988
1 南北 东单 无电梯 6 ... 东城 精装 60.0 1988
2 南西 崇文门 有电梯 16 ... 东城 其他 210.0 1996
3 南 崇文门 NaN 7 ... 东城 精装 39.0 2004
4 南 陶然亭 有电梯 19 ... 东城 精装 90.0 2010
5 南北 广渠门 有电梯 18 ... 东城 其他 111.0 2003
6 南 西罗园 无电梯 6 ... 东城 其他 42.0 1992
7 南 西罗园 有电梯 16 ... 东城 其他 105.0 1999
#如果我想从上面数据筛选 District 值为 木樨地的数据
mu_xi_di = df[df.District.str.startswith('木樨地')]
print(mu_xi_di)
21449 南 木樨地 有电梯 17 ... 西城 精装 47.0 1984
21466 东西 木樨地 无电梯 7 ... 西城 精装 78.0 1999
21493 南 木樨地 有电梯 18 ... 西城 精装 75.0 1996
21563 西北 木樨地 有电梯 16 ... 西城 精装 77.0 1984
21571 东北 木樨地 有电梯 18 ... 西城 简装 84.0 1996
21578 南北 木樨地 有电梯 12 ... 西城 简装 71.0 1981
#列名都是英文的,如何换为中文
new_column = {'Direction':'方位',
'District':'地名',
'Elevator':'是否有电梯',
'Floor':'楼层',
'Garden':'街道胡同',
'Id':'编号',
'Layout':'房屋布局',
'Price':'价格',
'Region':'城区',
'Renovation':'装修程度',
'Size':'房屋面积',
'Year':'年份'
}
df.rename(columns=new_column,inplace=True)
print(df)
index 方位 地名 是否有电梯 楼层 街道胡同 ... 价格 城区 装修程度 房屋面积 年份
0 东西 灯市口 NaN 6 锡拉胡同21号院 ... 780.0 东城 精装 75.0 1988
1 南北 东单 无电梯 6 东华门大街 ... 705.0 东城 精装 60.0 1988
2 南西 崇文门 有电梯 16 新世界中心 ... 1400.0 东城 其他 210.0 1996
3 南 崇文门 NaN 7 兴隆都市馨园 ... 420.0 东城 精装 39.0 2004
#是否有电梯存在Nan值,可以向后向前填充.如果是数值型的,可以使用平均值和中位数来填充.
df.fillna('未知',method='bfill,ffill')
#如果有两个DataFrame 具有相同的列,可以使用 pandas的merge合并.
mean = DataFrame(df.groupby('District').Price.sum()) #类似sql 中 select District,sum(Price) from table group by District;
floor = DataFrame(df.groupby('District').Size.sum())
me_fl = pd.merge(mean,floor,how='inner',on='District')
Price Size
District
CBD 19499.0 2405.0
七里庄 58178.0 9869.0
万寿路 13999.0 1411.0
#如果想要增加一列平均值
me_fl['avg'] = round(me_fl['Price'] / me_fl['Size'],2)
Price Size avg
District
CBD 19499.0 2405.0 8.11
七里庄 58178.0 9869.0 5.90
万寿路 13999.0 1411.0 9.92
df = pd.read_csv(f,headers=n ).head() headers=n表示从第n行开始读取,head表示读取多少行.
.tail() 表示从末尾读取多少行
print(df.loc[1]) #可以定位具体的索引行
Direction 南北
District 东单
Elevator 无电梯
Floor 6
Garden 东华门大街
Id 101102650978
Layout 2室1厅
Price 705
Region 东城
Renovation 精装
Size 60
Year 1988
#如果想要某一列的值变为索引列可以使用set_index
df.set_index('Direction',inplace=True)
#如果想要统计每个索引列出现的次数
print(Series(df.index).value_counts()) #value_counts() 是Series特有的方法
df.dropna() #可以删除Nan值
df.sort_index(ascending=False) #对索引列进行排序
file = 'F:\\数据分析数据\\药.csv'
f = open(file,encoding='gbk',errors='ignore')
df = pd.read_csv(f)
new_column = {'购药时间':'销售时间'}
df.rename(columns=new_column,inplace=True)
sales = df.dropna(subset=['社保卡号','商品名称'],how='any')
sale = DataFrame(sales)
sale['销售时间'],sale['销售星期'] = sale['销售时间'].str.split(' ',1).str
sale.sort_values('销售时间',ascending=True)
sale.drop_duplicates(subset=['社保卡号','销售时间'],inplace=True)
total = sale.shape[0]
sale['销售时间'] = pd.to_datetime(sale['销售时间'],format='%Y-%m-%d',errors = 'coerce')
month = (sale['销售时间'].max() - sale['销售时间'].min()).days
buy_rate = (total / month)
x = list(sale['销售星期'])
y = list(sale['销售数量'])
plt.plot(x,y)
plt.xlabel('时间')
plt.ylabel('数量')
plt.title('购买情况')
plt.show()