如何在python pandas read_csv中删除没有标题的列

时间:2018-05-11 23:40:52

标签: python python-3.x pandas dataframe

目前,我必须提前阅读CSV文件并设置标题。然后放下我不想要的列。有没有办法直接这样做?

# Current Code
columns_name = ['station', 'date', 'observation', 'value', 'other_1', 
'other_2', 'other_3', 'other_4']
del_columns_name = ['other_1', 'other_2', 'other_3', 'other_4']
df =pd.read_csv('filename', names = columns_name)
df.drop(del_columns_name, axis=1)

2 个答案:

答案 0 :(得分:2)

一种方法是使用两个列表来解析所需的索引和列名。

然后使用pd.read_csvusecolsnames参数分别指定列索引和名称。

idx, cols = list(zip(*((i, x) for i, x in enumerate(columns_name) \
                 if x not in del_columns_name)))

df = pd.read_csv('filename', usecols=idx, names=cols, header=None)

正如文档中所述,当没有标题时,您还应明确指定header=None

<强>解释

  • 使用生成器表达式迭代columns_name并删除del_columns_name以外的项目。
  • 使用enumerate提取索引。
  • 使用zip为索引和列名创建单独的元组。

答案 1 :(得分:2)

我想你甚至可以马上指定索引。在这种情况下,您对以下内容感兴趣:[0,1,2,3]。考虑这个也解析日期的例子。

import pandas as pd

cols = ['station', 'date', 'observation', 'value']

data = '''\
1, 2018-01-01, 1, 1, 1, 1, 1, 1
2, 2018-01-02, 2, 2, 2, 2, 2, 2'''

file = pd.compat.StringIO(data)
df = pd.read_csv(file, names=cols, usecols=[0,1,2,3], parse_dates=[1])

print(df)

返回:

   station       date  observation  value
0        1 2018-01-01            1      1
1        2 2018-01-02            2      2