STC214/Python使用pandas处理csv文件

Created Tue, 22 Jun 2021 16:43:08 +0800 Modified Tue, 22 Jun 2021 16:43:08 +0800

原文:https://blog.csdn.net/weixin_39126107/article/details/105737387

ython中引入pandas包可以很方便的对csv格式的数据进行处理

import pandas as pd

csv文件的读写

data = pd.read_csv('D:\data\train.scv',names=['ID','index'],dtype={'ID':pd.np.string_},index_col=0)    
#names指定列名,dtype指定读取的格式,index_col指定索引的位置
  
  
data.columns = ['ID','index']  
#读入后指定列名
data.rename(columns={'ID':'name','index':'goal'}, inplace = True)  
#读入后更改列名
  
  
data.to_csv('D:\data\train.scv',encoding='utf-8')  
#写入文件
  

csv文件的拼接

对记录相同类型数据的csv文件进行简单的内容拼接

df3 = pd.concat([df1,df2],axis=0)  
#axis=0表示行拼接,axis=1表示列拼接

concat只是进行简单的内容拼接,比如df1有100行,df2有100行,那么拼接后的df3有200行 csv文件的合并

两个csv文件按照某一列的值进行合并,例如相同ID号的数据进行合并

df3 = pd.merge(df1,df2,on=['ID'],how='left')  
#将df1和df2中ID号相同的行进行合并

删除某些列

将csv文件中的某些列删除

df1 = df1.drop(['grid_x','grid_y'],axis=1)  
#grid_x,grid_y是要删除的列,axis=1表示列删除

删除重复行

删除指定列值相同的行

df1= df1.drop_duplicates(subset=['ID','index'],keep='first')  
#删除ID,index的值相同的行,重复行保留第一个

改变列值的数据类型

df1['hour'] = df1['hour'].astype(str)  
##将df1中的hour属性的类型改为str

数据特定长度截断

对某一列的数据的长度进行截取

df1['time'] = round(df1['time'],6)  
#将time的数据保留6位,例如从20200424保留6位为202004

数据分组操作

根据某一列数据的值对其分组并进行求和,求平均,求方差等操作

dict_mean = dict(df1.groupby(['ID']).mean()['index'])  
#按照ID号进行分组,将具有相同ID号的行分到一组并求index的均值
#并保存到一个字典中
  
dict_std = dict(df1.groupby(['ID']).std()['index'])  
#按照ID号进行分组,将具有相同ID号的行分到一组并求index的方差
#并保存到一个字典中

选择特定行

根据条件选择特定行

df1 = data[data['ID'].isin(['3'])]  
#将ID值为3的行选出
  
df1 = data[data['ID'].~isin(['3'])]  
#选择ID值不为3的行
  
df1=data[data['index']>=7]  
#选择index值大于等于7的行

对某列的值进行操作

df1['new_ID']=df1.ID.apply(lambda x:x-10 if x>=10 else x)  
#对df1的ID值进行操作,当值大于10时减10,否则保持原值
#对字符串或者其他类型的值也可以类似的进行操作

空缺值填零

df1['Index'] = df1['Index'].fillna(0.0)  
#index中的空缺值补零

匹配字典

#dict_id: key是ID,values是name
df1['name']=df1['ID'].map(dict_id)  
#每行的name值等于其ID值在字典中对应的name值