python pandas没有从csv文件中读取第一列
Posted
技术标签:
【中文标题】python pandas没有从csv文件中读取第一列【英文标题】:python pandas not reading first column from csv file 【发布时间】:2014-03-21 01:23:36 【问题描述】:我有一个简单的 2 列 csv 文件,名为 st1.csv:
GRID St1
1457 614
1458 657
1459 679
1460 732
1461 754
1462 811
1463 748
但是,当我尝试读取 csv 文件时,第一列未加载:
a = pandas.DataFrame.from_csv('st1.csv')
a.columns
输出:
Index([u'ST1'], dtype=object)
为什么第一列没有被读取?
【问题讨论】:
假设第一列是索引,试试a =pandas.DataFrame.from_csv('st1.csv', index_col=False)
非常感谢,这正是我所缺少的。
当我阅读压缩的 csv(使用 python、pandas)时,我面临着完全相反的问题。任何解释为什么它不遵循行为?
【参考方案1】:
从您的数据来看,您使用的分隔符似乎是
。
尝试以下方法:
a = pandas.DataFrame.from_csv('st1.csv', sep=' ')
另一个问题是它假设您的第一列是一个索引,我们也可以禁用它:
a = pandas.DataFrame.from_csv('st1.csv', index_col=None)
更新:
在较新的 pandas 版本中,执行以下操作:
a = pandas.DataFrame.from_csv('st1.csv', index_col=False)
【讨论】:
有趣的是,在文档中没有提到设置 index_col=False,但这绝对是解决方案的一部分:pandas.pydata.org/pandas-docs/stable/generated/… 在 Python 3 中:index_col=False 抛出错误,我使用 index_col=None 并且它工作正常... 我同意@Grant,你必须使用 index_col=None(即使在 Python 2 中)。 @Grant & Tom - 我已经更新了我的答案以反映这一点。谢谢你通知我。 Python 3.5 和 pandas 0.21.1:index_col = False
工作正常,但 index_col = None
被忽略了。奇怪。【参考方案2】:
根据比较read_csv
和from_csv
的文档,它表明可以放置index_col = None
。我尝试了以下方法并且成功了:
DataFrame.from_csv('st1.csv', index_col=None);
这假设数据是逗号分隔的。
请查看以下链接
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_csv.html
【讨论】:
【参考方案3】:对于较新版本的 pandas,pd.DataFrame.from_csv
不再存在,index_col=None
不再适用于 pd.read_csv
。 您需要将pd.read_csv
与index_col=False
一起使用:
pd.read_csv('st1.csv', index_col=False)
例子:
(so) URSA-MattM-MacBook:*** mmessersmith$ cat input.csv
Date Employee Operation Order
2001-01-01 08:32:17 User1 Approved #00045
2001-01-01 08:36:23 User1 Edited #00045
2001-01-01 08:41:04 User1 Rejected #00046
2001-01-01 08:42:56 User1 Deleted #00046
2001-01-02 09:01:11 User1 Created #00047
2019-10-03 17:23:45 User1 Approved #72681
(so) URSA-MattM-MacBook:*** mmessersmith$ python
Python 3.7.4 (default, Aug 13 2019, 15:17:50)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> pd.__version__
'0.25.1'
>>> df_bad_index = pd.read_csv('input.csv', delim_whitespace=True)
>>> df_bad_index
Date Employee Operation Order
2001-01-01 08:32:17 User1 Approved #00045
2001-01-01 08:36:23 User1 Edited #00045
2001-01-01 08:41:04 User1 Rejected #00046
2001-01-01 08:42:56 User1 Deleted #00046
2001-01-02 09:01:11 User1 Created #00047
2019-10-03 17:23:45 User1 Approved #72681
>>> df_bad_index.index
Index(['2001-01-01', '2001-01-01', '2001-01-01', '2001-01-01', '2001-01-02',
'2019-10-03'],
dtype='object')
>>> df_still_bad_index = pd.read_csv('input.csv', delim_whitespace=True, index_col=None)
>>> df_still_bad_index
Date Employee Operation Order
2001-01-01 08:32:17 User1 Approved #00045
2001-01-01 08:36:23 User1 Edited #00045
2001-01-01 08:41:04 User1 Rejected #00046
2001-01-01 08:42:56 User1 Deleted #00046
2001-01-02 09:01:11 User1 Created #00047
2019-10-03 17:23:45 User1 Approved #72681
>>> df_still_bad_index.index
Index(['2001-01-01', '2001-01-01', '2001-01-01', '2001-01-01', '2001-01-02',
'2019-10-03'],
dtype='object')
>>> df_good_index = pd.read_csv('input.csv', delim_whitespace=True, index_col=False)
>>> df_good_index
Date Employee Operation Order
0 2001-01-01 08:32:17 User1 Approved
1 2001-01-01 08:36:23 User1 Edited
2 2001-01-01 08:41:04 User1 Rejected
3 2001-01-01 08:42:56 User1 Deleted
4 2001-01-02 09:01:11 User1 Created
5 2019-10-03 17:23:45 User1 Approved
>>> df_good_index.index
RangeIndex(start=0, stop=6, step=1)
【讨论】:
以上是关于python pandas没有从csv文件中读取第一列的主要内容,如果未能解决你的问题,请参考以下文章
读取大型 csv 文件、python、pandas 的随机行
使用 numpy / pandas 读取 Python 中 CSV 文件的最后 N 行
使用 numpy / pandas 读取 Python 中 CSV 文件的最后 N 行
pandas处理csv文件时,添加索引 2019-02-27