pandas操作csv常用功能

x33g5p2x  于2022-07-19 转载在 其他  
字(5.2k)|赞(0)|评价(0)|浏览(636)

pandas选取指定列

Pandas 获取列名原文链接:https://blog.csdn.net/lb521200200/article/details/123829793

批量替换整体替换:

批量替换自定义规则

pandas添加表头

pandas筛选空数据

Pandas添加表头(以前有表头不能用),筛选空数据,遍历

按列筛选:

取指定列数据并筛选

筛选完整示例:

添加列:

pandas选取指定列

1,按照位置:

  1. import pandas as pd
  2. data = pd.read_csv()
  3. data = data.iloc[:, 0:3] # 按位置取某几列

2,按照指定列名:

  1. import pandas as pd
  2. df=pd.read_excel("职位明细329.xlsx")
  3. df1 = df[['用户ID','职位ID']]

Pandas 获取列名

原文链接:https://blog.csdn.net/lb521200200/article/details/123829793

  1. import pandas as pd
  2. from numpy.random import randint
  3. df = pd.DataFrame(columns=list('abcdefghij'))
  4. %timeit [column for column in df]
  5. %timeit list(df.columns.values)
  6. %timeit list(df)
  7. %timeit list(df.columns)

批量替换整体替换:

创建字典

dict = {"A":1, "B":2, "C":3}  # 其中ABC为原数据,123为替换数据

替换

pd['替换列'] = pd['替换列'].replace(dict)  # '替换列'为需要替换列字段

批量替换自定义规则

  1. def get_path(path):
  2. if 'imgs' in path:
  3. return os.path.dirname(label_file) + path
  4. else:
  5. return path
  6. df_label = pd.read_csv(label_file)
  7. columns= list(df_label.columns.values)
  8. if dtype == "train":
  9. data = df_label[(df_label['is_train'] == 1)]
  10. else:
  11. data = df_label[(df_label['is_train'] == 0)]
  12. imgs = data[columns[0]].apply(get_path)
  13. self.imgs.extend(imgs.values.tolist())
  14. id1_s=data[columns[1]]
  15. self.id1_s.extend(id1_s.values.astype(np.int64))

pandas添加表头

  1. import pandas as pd
  2. df_label= pd.read_csv('tf.csv', header=None, names=['a', 'b', 'c'])
  3. df_label.loc[1] = ["related_path", 0, 0]
  4. df_label.to_csv('tf.csv', index=False)
  5. df_label = pd.read_csv('tf.csv', header=None, names=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'])
  6. df_label.to_csv('tf.csv', index=False)

pandas筛选空数据

  1. filtered_df = df[df['name'].notnull()]
  2. filtered_df = df[df['name'].isnull()]

Pandas添加表头(以前有表头不能用),筛选空数据,遍历

  1. import pandas as pd
  2. label_file=r'F:\label.csv'
  3. df_label = pd.read_csv(label_file)
  4. col_names = df_label.columns.tolist() # 将数据框的列名全部提取出来存放在列表里
  5. if 'box' not in col_names:
  6. col_names.append('box')
  7. df_label = pd.read_csv(label_file, header=None, names=col_names)
  8. df_label.to_csv(label_file, index=False)
  9. df_label = pd.read_csv(label_file)
  10. data_none = df_label[df_label["box"].isnull()]
  11. for index,data_n in data_none.iterrows():
  12. img_path=data_n[col_names[0]]
  13. if img_path.endswith(".jpg"):
  14. tmp_dir = r'F:\project\shida\not_found'
  15. img_path_all = os.path.dirname(label_file) + img_path
  16. shutil.copy(img_path_all, tmp_dir)

按列筛选:

注意:df_label.img_path

是直接选择列名,不用加引号""筛选。

  1. df_label.loc[(df_label.img_path == img_path), 'box'] = box
  2. df_label.loc[(df_label.img_path == img_path), col_names[1]] = new_index

取指定列数据并筛选

  1. data = df_label[(df_label["img_path"] == img_path)]
  2. if data.size>0:
  3. if data.shape[0]>1:
  4. print('err',img_path)

筛选完整示例:

  1. import os.path
  2. if __name__ == '__main__':
  3. import pandas as pd
  4. label_file=r'F:\project\shida\small\label.csv'
  5. df_label = pd.read_csv(label_file)
  6. col_names = df_label.columns.tolist() # 将数据框的列名全部提取出来存放在列表里
  7. if 'box' not in col_names:
  8. col_names.append('box')
  9. df_label = pd.read_csv(label_file, header=None, names=col_names)
  10. df_label.to_csv(label_file, index=False)
  11. df_label = pd.read_csv(label_file)
  12. data_path=r'F:\project\shida\small\val_clf_size_2.txt'
  13. with open(data_path ,'r') as f_r:
  14. lines =f_r.readlines()
  15. for line in lines:
  16. line_data= line.split(' ')
  17. img_path=line_data[0]
  18. img_path='/imgs/'+os.path.basename(img_path)
  19. box=line_data[1]
  20. id=int(line_data[2])
  21. data = df_label[(df_label["img_path"] == img_path)]
  22. if data.size>0:
  23. if data.shape[0]>1:
  24. print('err',img_path)
  25. exit(435)
  26. index=int(data[col_names[1]])
  27. new_index=0
  28. if index in [1,2]:
  29. new_index=index-1
  30. else:
  31. new_index = id+2
  32. df_label.loc[(df_label.img_path == img_path), 'box'] = box
  33. df_label.loc[(df_label.img_path == img_path), col_names[1]] = new_index
  34. else:
  35. print('not found',img_path)
  36. # df_label.loc[1] = ["related_path", 0, 0, 0]
  37. df_label.to_csv(label_file, index=False)

添加列:

  1. df_label = pd.read_csv(label_file)
  2. col_names = df_label.columns.tolist() # 将数据框的列名全部提取出来存放在列表里
  3. if 'box' not in col_names:
  4. df_label.insert(loc=len(col_names), column='box', value='')

pandas为DataFrame格式数据添加新列的方法非常简单,只需要新建一个列索引,再为其赋值即可。

5种常见添加新列的方法。

首先,创建一个DataFrame结构数据,作为数据举例。

  1. import pandas as pd
  2. # 创建一个DataFrame结构数据
  3. data = {'a': ['a0', 'a1', 'a2'],
  4.         'b': ['b0', 'b1', 'b2']}
  5. df = pd.DataFrame(data)
  6. print('举例数据情况:\n', df)

添加新列的方法,如下:
一、insert()函数
语法:
DataFrame.insert(loc, column, value,allow_duplicates = False)

参数    说明
loc    必要字段,int类型数据,表示插入新列的列位置,原来在该位置的列将向右移。
column    必要字段,插入新列的列名。
value    必要字段,新列插入的值。如果仅提供一个值,将为所有行设置相同的值。可以是int,string,float等,甚至可以是series /值列表。
allow_duplicates    布尔值,用于检查是否存在具有相同名称的列。默认为False,不允许与已有的列名重复。
实例:插入c列

df.insert(loc=2, column='c', value=3)  # 在最后一列后,插入值全为3的c列
print('插入c列:\n', df)
1
2

二、直接赋值法
语法:df[‘新列名’]=新列的值
实例:插入d列

df['d'] = [1, 2, 3]  # 插入值为[1,2,3]的d列
print('插入d列:\n', df)
1
2

注:该方法不可以选择插入新列的位置,默认为最后一列。如果新增的一列值相同,直接为其赋值一个常量即可;如果插入值不同,为列表格式,需与已有列的行数长度一致,如举例中原来列为3行,新增列也必须有3个值。

三、reindex()函数
语法:df.reindex(columns=[原来所有的列名,新增列名],fill_value=值)
reindex()函数用法较多,此处只是针对添加新列的用法
实例:插入e列

df1 = df.reindex(columns=['a', 'b', 'c', 'd', 'e'])  # 不加fill_value参数,默认值为Nan
df2 = df.reindex(columns=['a', 'b', 'c', 'd', 'e'], fill_value=1)  # 加入fill_value参数,填充值为1
print('插入e列(不加fill_value参数):\n', df1)
print('插入e列(加fill_value参数):\n', df2)
1
2
3
4

注:该方法需要把原有的列名和新列名都加上,如果列名过多,就比较麻烦。

四、concat()函数
原理:利用拼接的方式,添加新的一列。好处是可以同时新增多个列名。
concat()函数用法较多,此处只是针对添加新列的用法
实例:插入f列

df1 = pd.concat([df1, pd.DataFrame(columns=['f'])])
print('插入f列:\n', df1)
1
2

五、loc()函数
原理:利用loc的行列索引标签来实现。
语法:df.loc[:,新列名]=值
实例:插入g列

df1.loc[:, 'g'] = 0
print('插入g列:\n', df1)
1
2

以上就是pandas添加新列的5种常见用法。
————————————————
版权声明:本文为CSDN博主「一位代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LHJCSDNYL/article/details/124577994

相关文章