读取CSV文件中的单列数据并将其存储到数组中

14

如何从csv文件中读取特定的一列数据,例如 title 列?

ID | date|  title |
-------------------
  1|  2013|   abc |
  2|  2012|   cde |

该列应该被存储在一个如下的数组中:
data = ["abc", "cde"]

目前,我使用 pandas 得到了以下结果:

data = pd.read_csv("data.csv", index_col=2)

我已经查阅了这个帖子。然而我仍然收到一个IndexError: list index out of range错误。

编辑

这不是一个表格,而是逗号分隔的,像这样:

ID,date,title
1,2013,abc
2,2012,cde

你的文件真的长这样吗,有 |-- 之类的吗?(不太像逗号分隔的值(CSV),但是我们可以通过一些工作读取它。) - DSM
你确定所有行都有3列吗?听起来好像有些行缺少第三列,或者更多。 - Martijn Pieters
3个回答

24

其中一种选择是读入整个csv文件,然后选择一个列:

data = pd.read_csv("data.csv")

data['title']  # as a Series
data['title'].values  # as a numpy array

如@dawg所建议的那样,您可以使用usecols参数,如果您还使用squeeze参数,则可以避免某些hackery将值数组展平...

In [11]: titles = pd.read_csv("data.csv", sep=',', usecols=['title'], squeeze=True)

In [12]: titles  # Series
Out[12]: 
0    abc
1    cde
Name: title, dtype: object

In [13]: titles.values  # numpy array
Out[13]: array(['abc', 'cde'], dtype=object)

6
你可以像这样做:
>>> import pandas as pd
>>> from StringIO import StringIO
>>> txt='''\
... ID,date,title
... 1,2013,abc
... 2,2012,cde'''
>>> data=pd.read_csv(StringIO(txt), usecols=['title']).T.values.tolist()[0]
>>> data
['abc', 'cde']

假设你有一些空白:

txt='''\
ID,date,title
1,2013,abc
2,2012,cde
3,2014, 
4,2015,fgh'''
table=pd.read_csv(StringIO(txt), usecols=['title'])
print table
  title
0   abc
1   cde
2      
3   fgh
data=pd.read_csv(StringIO(txt), usecols=['title']).T.values.tolist()[0]
print data
['abc', 'cde', ' ', 'fgh']

或者如果您有可变数量的数据字段:

txt='''\
ID,date,title
1,2013,
2,2012,cde
3
4,2015,fgh'''

print pd.read_csv(StringIO(txt), usecols=['title'])
  title
0   NaN
1   cde
2   NaN
3   fgh

print pd.read_csv(StringIO(txt), usecols=['title']).T.values.tolist()[0]
[nan, 'cde', nan, 'fgh']

我认为你假设我有某种类型的表格,但实际上它是一个逗号分隔的 CSV 文件,只是以错误的方式呈现(Excel 视图)。 - dh762
你可以使用 .ravel() 或 .flatten() 函数对数据进行操作,以获取一个扁平化的 numpy 数组。 - Andy Hayden

5
最终,这变得简单多了:
import pandas as pd
data = pd.read_csv("mycsv.csv")
data.columns = ["ID", "date", "title"]
rawlist = list(data.title)

喜欢输出为列表,正是我想要的。 - thegreatcoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接