经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
python中pandas读取csv文件?时如何省去csv.reader()操作指定列步骤
来源:jb51  时间:2022/1/19 11:43:50  对本文有异议

优点:

  • 方便,有专门支持读取csv文件的pd.read_csv()函数。
  • 将csv转换成二维列表形式
  • 支持通过列名查找特定列。
  • 相比csv库,事半功倍

1.读取csv文件

  1. import pandas as pd
  2. ?
  3. file="c:\data\test.csv"
  4. csvPD=pd.read_csv(file)
  5. ?
  6. df = pd.read_csv('data.csv', encoding='gbk') #指定编码
  7. ?
  8. ?
  9. read_csv()方法参数介绍
  10. filepath_or_buffer:文件所在路径
  11. encoding :编码,字符型,通常为'utf-8',如果中文读取不正常,可以将encoding设为'gbk'
  12. sep:分隔符,默认为一个英文逗号,即','
  13. delimiter :备选分隔符,如果指定了delimitersep失效
  14. header :整数或者由整数组成的列表,以用来指定由哪一列或者哪几列作为列名,默认为header=0,表示第一列作为列名
  15. eg: ?pd.read_csv('data.csv', encoding='gbk', header=1) # 指定第二列作为列名
  16. ? ? ?pd.read_csv('data.csv', encoding='gbk', header=[0,1,3])
  17. ? ? ?pd.read_csv('data.csv', encoding='gbk', header=None) #表示不从文件数据中指定行作为列名,这是Pandas会自动生成从零开始的序列作为列名
  18. ?
  19. names:一个列表,为数据额外指定列名。
  20. pd.read_csv('data.csv', encoding='gbk', names=['第一列', '第二列', '第三列', '第四列'])

2.#指定列:通过索引指定列名获取列

  1. data_new[] 建立空表存储行信息
  2. for i in range(len(csvPD)):
  3. ? ? lst_new = [] ?# 建立空列表存储行信息
  4. ? ? if "未知版本" in str(csvPD['版本组件'][i]):
  5. ? ? ? ? print(csvPD['版本组件'][i])
  6. ? ? ? ? # print(csvPD['匹配数量'][i])
  7. ? ? ? ? # print(csvPD['git'][i])
  8. ? ? ? ? # print(csvPD['来源链接'][i])
  9. ? ? ? ? lst_new.append(csvPD['版本组件'][i])
  10. ? ? ? ? lst_new.append(csvPD['匹配数量'][i])
  11. ? ? ? ? lst_new.append(csvPD['git'][i])
  12. ? ? ? ? lst_new.append(csvPD['来源链接'][i])
  13. ?
  14. ? ? ? ? data_new.append(lst_new) ?# 添加每行信息

3.根据index查询

条件:首先导入的数据必须的有index
或者自己添加吧,方法简单,读取excel文件时直接加index_col

代码示例:

  1. import pandas as pd ? ? ? ? ? ? ? ? ? ? #导入pandas库
  2. ?
  3. excel_file = './try.xlsx' ? ? ? ? ? ? ? #导入excel数据
  4. data = pd.read_excel(excel_file, index_col='姓名') ? ? ? ?
  5. #这个的index_col就是index,可以选择任意字段作为索引index,读入数据
  6. print(data.loc['李四']) ? ? ? ? ? ? ? ?#使用loc函数来查找

4.已知数据在第几行找到想要的数据

假如我们的表中,有某个员工的工资数据为空了,那我们怎么找到自己想要的数据呢。

代码如下:

  1. for i in data.columns:
  2. ? ? for j in range(len(data)):
  3. ? ? ? ? if (data[i].isnull())[j]:
  4. ? ? ? ? ? ? bumen = data.iloc[j, [0]] ? ? ? ? ? ? ? ? ? ? ? ? ? ? #找出缺失值所在的部门
  5. ? ? ? ? ? ? data[i][j] = charuzhi(bumen)

首先检索全部的数据,然后我们可以用pandas中的iloc函数。上面的iloc[j, [2]]中j是具体的位置,【0】是你要得到的数据所在的column

  1. """根据条件查询某行数据"""
  2. import pandas as pd ? ? ? ? ? ?#导入pandas
  3. ?
  4. excel_file = './try.xlsx' ? ? ? ?#导入文件
  5. data = pd.read_excel(excel_file) ? ? ?#读入数据
  6. ?
  7. print(data.loc[data['部门'] == 'A', ['姓名', '工资']]) ? ? #部门为A,打印姓名和工资
  8. print(data.loc[data['工资'] < 3000, ['姓名','工资']]) ? ?#查找工资小于3000的人

若要把这些数据独立生成excel文件或者csv文件:

添加以下代码:

  1. """导出为excel或csv文件"""
  2. dataframe_1 = data.loc[data['部门'] == 'A', ['姓名', '工资']]
  3. dataframe_2 = data.loc[data['工资'] < 3000, ['姓名', '工资']]
  4. dataframe_1.to_excel('dataframe_1.xlsx')
  5. dataframe_2.to_excel('dataframe_2.xlsx')
  6. ?
  7. data.iloc[:,:2] ?#即全部行,前两列的数据
  8. ?
  9. ?
  10. data['columns'] ?#columns即你需要的字段名称即可
  11. #注意这列的columns不能是index的名称
  12. #如果要打印index的话就data.index
  13. data.columns ?#与上面的一样
  14. ?
  15. data.iloc[:10,:][data.工资>6000] #找出前11行里工资大于6000的所有人的信息了

5.指定单元格:1001A列23时的AQI值

  1. keyWord="1001A"
  2. for i in range(len(csvPD)):
  3. ? ? if str(csvPD['hour'][i])=="23" and str(csvPD['type'][i])== "AQI":
  4. ? ? ? ? result=csvPD[keyWord][i]
  5. ? ? ? ? print(result)
  6. ? ? ? ??

解决遇到的"NAN":

  • csv文件中:1001A站点0时的AQI为空白值,返回的结果为NAN
  • NAN全称:Not A Number

常规解决思路:

使用numpy函数来判断:np.isnan()xxx is np.nan
通过运算操作判断:任何数字乘上0都是0
读取文件时加参数:pd.read_csv(file, keep_default_na=False)

操作结果如下图:

  • 1.推荐使用np.isnan()csvPD["1002A"][0] is np.nan显示为Flase
  • 2.推荐使用nan*0之后仍是nan,而不是0
  • 3.加了参数后,输出的所有数据类型变为str,nan变为空值,len(result)=0。

到此这篇关于?python中pandas读取csv文件?时如何省去csv.reader()操作指定列步骤的文章就介绍到这了,更多相关?python中pandas读取csv文件 内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号