我想把多个csv文件导入到一个字典中。我的想法是key是csv文件的名称,每个key的值是csv里面的表作为DataFrame类型。
我的代码是这样的。
import pandas as pd
data = '.././data/raw/'
all_files = [data + 'x.csv', data + 'y.csv']
list_a = []
result_dict = dict()
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0, encoding='mac_roman')
key = filename.split('/')[1]
result_dict[key]=df
# print(result_dict)
def get_dataframe(name):
dataframe = result_dict.get(name)
return dataframe
m_taiin =get_dataframe('x.csv')
type(m_taiin)
print(isinstance(m_taiin,pd.DataFrame))
但是当我在Macbook - Python3.7和Ubuntu 16.04 - Python3.6上运行这段代码时,结果是True。
但是当我在Arch Linux - Python 3.7上运行时,我的结果是False。值是NoneType而不是DataFrame。
我不知道哪一个是问题所在。
试着这样在for循环中...
key = filename.split('/')[-1]
为了避免跨平台的问题 split
我建议你们分头行动 os.sep
这是操作系统依赖的文件分隔符。
另外,我建议你使用 glob
列表库 .csv
文件夹中的文件和字典理解来创建你的 dict。
也就是说,你可以实现你的目标,即拥有一个键是文件名,值是实际数据框的字典,就像这样。
import pandas as pd
import glob
import os
data = '.././data/raw/'
all_files = glob.glob(data+'*.csv')
result_dict = {csv_file.split(os.sep)[-1]: pd.read_csv(csv_file) for file in all_files}
当然,要注意只有想要的 .csv
中,而不是其他文件夹中,因为 glob.glob
将列出所有的 .csv
.