pandas 操作数据

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()



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值