【问题标题】:Read a single column of a CSV and store in an array读取 CSV 的单列并存储在数组中
【发布时间】:2014-01-30 16:51:32
【问题描述】:

从 csv 中读取数据的最佳方式是什么,但只能读取一个特定的列,例如 title

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

然后该列应存储在这样的数组中:

data = ["abc", "cde"]

这是我目前所拥有的,pandas:

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

我已经调查过this thread。我仍然收到IndexError: list index out of range

编辑

这不是表格,它是这样用逗号分隔的:

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

【问题讨论】:

  • 这真的是你的文件的样子吗,|-- 等等? (不是真正的 CSV,逗号分隔值,但我们应该能够通过一些工作来读取它。)
  • 你确定 all 行有 3 列吗?听起来好像您的某些行缺少第三列,也许更多。

标签: python csv pandas


【解决方案1】:

你可以这样做:

>>> 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-View)。
  • 您可以在数据上使用 .ravel() 或 .flatten() 来获得扁平化的 numpy 数组。
【解决方案2】:

一个选项是读取整个 csv,然后选择一列:

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

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

正如@dawg 建议的那样,你可以使用 usecols 参数,如果你还使用挤压参数来避免一些骇人听闻的扁平化值数组...

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)

【讨论】:

    【解决方案3】:

    最后,简单多了:

    import pandas as pd
    data = pd.read_csv("mycsv.csv")
    data.columns = ["ID", "date", "title"]
    rawlist = list(data.title)
    

    【讨论】:

    • 就像输出列表一样,正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2021-11-11
    • 2017-03-17
    相关资源
    最近更新 更多