当我使用 pandas 读取 .csv 中的特定列时,奇怪的跳转

Posted

技术标签:

【中文标题】当我使用 pandas 读取 .csv 中的特定列时,奇怪的跳转【英文标题】:The strange jump over when I use pandas to read specific columns in .csv 【发布时间】:2016-09-23 22:13:32 【问题描述】:

1。背景

我上传的 .csv 文件 here 是一个示例文件,用于解释我的问题。

此文件包含中国所有城市(以代码表示)在特定日期的所有空气质量信息。

例如1001A列代表一个城市,该列中的值代表type列对应的空气污染物浓度。

1。我的问题

如果我想在 20160205-00:00 获取 1014A 城市的 AQI 值, 我只需要使用

 df = pd.read_csv("./this file")
 aqi = df["1014A"].iloc[0]

结果是 42。但是在LibraOffice中查看同一个文件,结果如下:

似乎 Pandas 阅读了1013A 并犯了错误。

所以,我想弄清楚1013A 列中发生了什么:

pandas 将此列(内部具有有限值)读取为 NaN 值列。它在这个文件中发生了很多次。它在以下方面困扰着我:

在 pandas.Dataframe 中,一些有数据的列被当作 NaN 列

其他列也会间接受到 Error-NaN 列的影响。

如果这个问题还没有解决,那列位置就会出错。

任何建议将不胜感激!

【问题讨论】:

1013A 在我的 LibraOffice 中是空的 【参考方案1】:

您的 csv 在该位置有两个逗号:

...19,20,24,19,22,24,29,,42,39...

这会被 pandas 读取为 NaN。

看起来在您的 LibreOffice 版本中它被跳过并使用后续值(不正确)。


In [11]: s = open("china_sites_20160205.csv").readlines()

In [12]: s[0].split(",")[13:18]
Out[12]: ['1011A', '1012A', '1013A', '1014A', '1015A']

In [13]: s[1].split(",")[13:18]
Out[13]: ['24', '29', '', '42', '39']

【讨论】:

感谢您的回复。所以,我的问题是因为双逗号而发生的。可以用s.replace(",,", "",)解决吗? 您将遇到的问题是列没有加起来(您会收到类似ValueError: Expected 1500 fields in line 2, saw 1445 的错误),在 LibreOffice 中您会看到此数据没有t 在右侧排队(因为它会跳过)。我怀疑这些数据“丢失”并且 NaN 是您想要的,但是您应该与生成 csv 的供应商/人员核实:询问 ,, 是什么意思。

以上是关于当我使用 pandas 读取 .csv 中的特定列时,奇怪的跳转的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 或其他 python 模块读取特定列

如何摆脱从 CSV 文件读取的 pandas DataFrame 中的“未命名:0”列?

pandas使用read_csv函数读取csv数据设置parse_dates参数将csv数据中的指定字段数据列解析为时间日期对象

如何阅读pyspark中的特定列?

使用 Pandas 读取 CSV 时如何在列中保持前导零?

错误:pandas hashtable keyerror