当我使用 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 中的特定列时,奇怪的跳转的主要内容,如果未能解决你的问题,请参考以下文章
如何摆脱从 CSV 文件读取的 pandas DataFrame 中的“未命名:0”列?
pandas使用read_csv函数读取csv数据设置parse_dates参数将csv数据中的指定字段数据列解析为时间日期对象