尾随空格导致列名在read_csv中与usecols不匹配



我有几千个类似格式的csv文件,我正在从每个文件中读取两列。它们可能有不同的顺序,主要问题似乎是每一行的末尾都有一个尾随空格,包括标题。假设我有几个标题看起来像这样:

'apple','banana','orange '
'banana','kiwi','apple '
'grape','apple','banana '

我在for循环中这样做,以将所有数据保存在dict:中

results[fruitfilepath] = pd.read_csv(fruitfilepath,usecols=['apple', 'banana']

它一直工作,直到它找到一个以"apple"或"banana"为最后一列的文件,因此在它后面有一个空格。

理论上,我可以想出三种方法来解决这个问题,但我正在努力实现它们。

第一,有没有办法在usecols中包含通配符?类似以下内容(不起作用(。

results[fruitfilepath] = pd.read_csv(fruitfilepath,usecols=['apple*', 'banana*']

第二,使用多个列名,但以某种方式触发read_csv跳过文件中不存在的列。

results[fruitfilepath] = pd.read_csv(fruitfilepath,usecols=['apple', 'banana','apple ', 'banana ']

第三,通过删除所有尾随空格来预处理所有文件。这相当简单,但似乎有些过分,我想还有更好的方法。

第四,我还缺少什么?

我认为您可以将第二个和第三个选项组合起来,通过读取第一行来手动设置列名,并计算出应该动态调用的标题。

读取第一行以获得当前的列名列表

headers_df = pd.read_csv("mydata.csv", nrows=1, header = None)

将标题转换为列表

headers = headers_df.values.tolist()[0]

修复列名以删除空格

fixed_headers = [x.strip(' ') for x in headers]

手动用固定的文件头替换文件头,选择需要的两个

d = pd.read_csv('test.csv', header=0, names=fixed_headers, usecols=['apple','banana'])

df.columns中插入原始n-1列的列表+最后一列减去其最后一个字符

df.columns = df.columns[:-1].to_list() + [df.columns[-1][:-1]]

示例:

df = pd.DataFrame({'a': [1, 2], 'b': [2, 3], 'cd': [3, 4]})
df.columns = df.columns[:-1].to_list() + [df.columns[-1][:-1]]
df.columns

输出:Index(['a', 'b', 'c'], dtype='object')

这就是我的方法,(我认为(您可以在df.columns[-1]上执行任何您想要的字符串操作。

最新更新