我有一个包含许多 csv 文件的目录,我已将这些文件加载到数据框字典中
因此,只需 3 个示例小 csv 文件来说明
import os
import csv
import pandas as pd
#create 3 small csv files for test purposes
os.chdir('c:/test')
with open('dat1990.csv','w',newline='') as fp:
a=csv.writer(fp,delimiter=',')
data = [['Stock','Sales','Year'],
['100','24','1990'],
['120','33','1990'],
['23','5','1990']]
a.writerows(data)
with open('dat1991.csv','w',newline='') as fp:
a=csv.writer(fp,delimiter=',')
data = [['Stock','Sales','Year'],
['400','35','1991'],
['450','55','1991'],
['34','6','1991']]
a.writerows(data)
with open('other1991.csv','w',newline='') as fp:
a=csv.writer(fp,delimiter=',')
data = [['Stock','Sales','Year'],
['500','56','1991'],
['600','44','1991'],
['56','55','1991']]
a.writerows(data)
创建用于将 csv 文件处理为数据帧的字典
dfcsv_dict = {'dat1990': 'dat1990.csv', 'dat1991': 'dat1991.csv',
'other1991': 'other1991.csv'}
创建一个简单的导入函数,用于将 csv 导入到 Pandas
def myimport(csvfile):
return pd.read_csv(csvfile)
遍历字典以将所有 csv 文件导入到 Pandas 数据帧中
df_dict = {}
for k, v in dfcsv_dict.items():
df_dict[k] = myimport(v)
鉴于我现在在统一字典对象中可能有数千个数据帧,我如何选择一些并从字典中“提取”它们?
例如,我将如何仅提取嵌套在字典中的这三个数据帧中的两个,例如
dat1990 = df_dict['dat1990']
dat1991 = df_dict['dat1991']
但不使用字面赋值。也许是字典上的某种循环结构,希望有一种方法可以根据字典键中的字符串序列选择一个子组:
例如所有名为 dat 或 1991 等的数据框
我不想要另一个“子字典”,但想将它们提取为命名为“独立”数据帧,如上面的代码所示。
我正在使用 python 3.5。
最佳答案
这是 2016 年 1 月的一个老问题,但由于没有人回答,这里是 2019 年 10 月的答案。可能对将来的引用有用。
我认为您可以跳过创建数据框字典的步骤。我之前写了一个关于如何从多个 CSV 文件创建单个主数据框的答案,并在主数据框中添加一列,其中包含从 CSV 文件名中提取的字符串。我认为你基本上可以在这里做同样的事情。
Create a dataframe of csv files based on timestamp intervals
脚步:
import pandas as pd
import os
# Step 1: create a path to the folder, syntax for Windows OS
path_test_folder = 'C:\\test\\'
# Step 2: create a list of CSV files in the folder
files_in_folder = os.listdir(path_test_folder)
files_in_folder = [x for x in files_in_folder if '.csv' in x]
# Step 3: create empty master dataframe to store CSV files
df_master = pd.DataFrame()
# Step 4: loop through the files in folder
for each_csv in files_in_folder:
# temporary dataframe for the CSV
path_csv = os.path.join(path_test_folder, each_csv)
temp_df = pd.read_csv(path_csv)
# add folder with filename
temp_df['str_filename'] = str(each_csv)
# combine into master dataframe
df_master = pd.concat([df_master, temp_df])
# then filter on your filenames
mask_filter = df_master['str_filename'].isin(['dat1990.csv', 'dat1991.csv'])
df_filter = df_master.loc[mask_filter]
关于dictionary - 从数据框字典中提取数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34933044/