我有几千个类似格式的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]
上执行任何您想要的字符串操作。