全球环境python词典
我尝试使用python在循环中打开cvs文件列表。我开始的想法是将文件打开到字典中,因为有人告诉我不要尝试动态创建名称,我尝试了以下代码 加载所有csv文件 创建三个数据帧的列表:数据帧 在这之前,一切都很顺利。 注意-我的问题发生在这里,这里的结果只是两个数据帧中的一个 我能直接从循环中打开这个csv文件并动态命名它们吗?我有大约20个csv,我正在尝试自动化一点代码。tks 编辑问题以便于支持 创造词汇 传递到数据帧 创建数据帧列表 创建数据帧字典 从数据帧字典回到数据帧(这里是我失败的地方,为什么?)全球环境python词典,python,pandas,dictionary,Python,Pandas,Dictionary,我尝试使用python在循环中打开cvs文件列表。我开始的想法是将文件打开到字典中,因为有人告诉我不要尝试动态创建名称,我尝试了以下代码 加载所有csv文件 创建三个数据帧的列表:数据帧 在这之前,一切都很顺利。 注意-我的问题发生在这里,这里的结果只是两个数据帧中的一个 我能直接从循环中打开这个csv文件并动态命名它们吗?我有大约20个csv,我正在尝试自动化一点代码。tks 编辑问题以便于支持 创造词汇 传递到数据帧 创建数据帧列表 创建数据帧字典 从数据帧字典回到数据帧(这里是我失败的地方
我认为需要
dict comprehension
,以便按文件名使用键的数据帧字典:
dataframes = {i:pd.read_csv(i) for i in filenames}
print (dataframes['broaderRelationsSkillPillar.csv'])
print (dataframes['ISCOGroups_en.csv'])
或者可以通过索引删除最后一个.csv
:
dataframes = {i[:-4]: pd.read_csv(i) for i in filenames}
print (dataframes['broaderRelationsSkillPillar'])
print (dataframes['ISCOGroups_en'])
示例数据帧:
df1 = pd.DataFrame({'A': ['a','a'],'B': list(range(2))})
df2 = pd.DataFrame({'C': ['b','f','s'],'D': list(range(3))})
df3 = pd.DataFrame({'E': ['f','g','h'],'F': list(range(3))})
print (df1)
A B
0 a 0
1 a 1
print (df2)
C D
0 b 0
1 f 1
2 s 2
print (df3)
E F
0 f 0
1 g 1
2 h 2
已创建数据帧的字典
:
dataframes = {'file1':df1, 'file2':df2, 'file3':df3}
print (dataframes)
{'file1': A B
0 a 0
1 a 1, 'file2': C D
0 b 0
1 f 1
2 s 2, 'file3': E F
0 f 0
1 g 1
2 h 2}
print (dataframes)
{'file1': A B
0 aa 0
1 aa 1, 'file2': C D
0 ba 0
1 fa 1
2 sa 2, 'file3': E F
0 fa 0
1 ga 1
2 ha 2}
对于数据帧
按键选择
-或按文件1
:
print (dataframes['file1'])
A B
0 a 0
1 a 1
循环中的v
是DataFrame
:
for k ,v in dataframes.items():
print (k)
print (v)
print (type(v))
file1
A B
0 a 0
1 a 1
<class 'pandas.core.frame.DataFrame'>
file2
C D
0 b 0
1 f 1
2 s 2
<class 'pandas.core.frame.DataFrame'>
file3
E F
0 f 0
1 g 1
2 h 2
<class 'pandas.core.frame.DataFrame'>
print (dataframes['file1'])
A B
0 aa 0
1 aa 1
数据帧字典:
dataframes = {'file1':df1, 'file2':df2, 'file3':df3}
print (dataframes)
{'file1': A B
0 a 0
1 a 1, 'file2': C D
0 b 0
1 f 1
2 s 2, 'file3': E F
0 f 0
1 g 1
2 h 2}
print (dataframes)
{'file1': A B
0 aa 0
1 aa 1, 'file2': C D
0 ba 0
1 fa 1
2 sa 2, 'file3': E F
0 fa 0
1 ga 1
2 ha 2}
选中一个数据帧:
for k ,v in dataframes.items():
print (k)
print (v)
print (type(v))
file1
A B
0 a 0
1 a 1
<class 'pandas.core.frame.DataFrame'>
file2
C D
0 b 0
1 f 1
2 s 2
<class 'pandas.core.frame.DataFrame'>
file3
E F
0 f 0
1 g 1
2 h 2
<class 'pandas.core.frame.DataFrame'>
print (dataframes['file1'])
A B
0 aa 0
1 aa 1
所有csv文件的内容是否相同?为什么不循环
data\u list
并使用单独的数据帧,如果愿意,您可以将它们合并。[k]=pd.dataframe.from_dict(dataframes[k])
为什么要用括号括住k
?你想在这里干什么?还有。。。为什么要读两遍csv,然后从目录中。。。你不能停在dfs={fname:pd.read_csv(fname)for fname in filenames}
?你的第二个循环有什么意义?为什么要将数据帧传递给pd.DataFrame.from_dict
?@我最初尝试在循环中创建数据帧,但没有成功。但当我试着把所有的东西都传给字典时,我成功了。但后来我想,好吧,我怎么知道打开这本数据帧字典…一次成功就有两个技巧:)我的大问题是;假设我在一本字典中有10个数据帧,如何将所有10个数据帧单独解包到全局环境中?@Ian_De_Oliveira-hmm,为什么有必要?您需要将所有10
连接在一起吗?因为如果使用dataframes['ISCOGroups\u en.csv']
就像df
,请通过print(键入(dataframes['ISCOGroups\u en.csv'])检查它
像往常一样谢谢。我今天上午会尝试,不需要将它们连接在一起。我更感兴趣的是如何从循环中的数据帧字典中提取df。@Ian_De_Oliveira-我尝试用示例数据解释更多内容,如果仍然不清楚,请告诉我。
print (dataframes['file1'])
A B
0 a 0
1 a 1
for k ,v in dataframes.items():
print (k)
print (v)
print (type(v))
file1
A B
0 a 0
1 a 1
<class 'pandas.core.frame.DataFrame'>
file2
C D
0 b 0
1 f 1
2 s 2
<class 'pandas.core.frame.DataFrame'>
file3
E F
0 f 0
1 g 1
2 h 2
<class 'pandas.core.frame.DataFrame'>
for k ,v in dataframes.items():
#modify df - e.g. add `a` to first column
v.iloc[:, 0] = v.iloc[:, 0] + 'a'
print (v)
dataframes[k] = v
A B
0 aa 0
1 aa 1
C D
0 ba 0
1 fa 1
2 sa 2
E F
0 fa 0
1 ga 1
2 ha 2
print (dataframes)
{'file1': A B
0 aa 0
1 aa 1, 'file2': C D
0 ba 0
1 fa 1
2 sa 2, 'file3': E F
0 fa 0
1 ga 1
2 ha 2}
print (dataframes['file1'])
A B
0 aa 0
1 aa 1