繁体   English   中英

字典到全局环境python

[英]Dictionary to global environment python

我试图使用 python 在循环中打开一个 cvs 文件列表。 我从将文件打开到字典的想法开始,因为有人告诉我不要尝试动态创建名称,我尝试了以下代码

加载所有 csv 文件

 filenames = ["broaderRelationsSkillPillar.csv","ISCOGroups_en.csv"]

 dataframes ={}    ## create a dictionary 

创建三个 DataFrame 的列表:dataframes

for i in filenames :
    dataframes[i] = pd.read_csv(i) 

直到这里一切顺利。

for k ,v in dataframes.items():
    [k] = pd.DataFrame.from_dict(dataframes[k])

注意 - 我的问题发生在这里,我的结果只是 2 个数据帧之一

我可以直接从循环中打开这个 csv 文件并动态命名它们吗? 我有大约 20 个 csv,我正在尝试自动化一些代码。 tks

问题已编辑以方便支持

创建词典

d = {'col1': [1, 2], 'col2': [3, 4]} 
a = {'col3': [1, 2], 'col4': [3, 4]} 
c = {'col3': [1, 2], 'col4': [3, 4]} 

传递到数据框

d= pd.DataFrame(data=d)
a= pd.DataFrame(data=a)
c= pd.DataFrame(data=c)

创建数据框列表

filenames = [a ,d ,c]

创建数据框字典

dataframes ={}    ## create a dictionary 

for i in filenames :
    dataframes[i] = i

del a , c, d    

从数据框字典回到数据框(这是我失败的地方,为什么?)

for k ,v in dataframes.items():
    k = pd.from_dict(dataframes[k])

我相信需要对带有文件名键的 DataFrame 字典进行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

创建dictionary of DataFrames

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}

对于DataFrame通过key -ere 通过file1

print (dataframes['file1'])
   A  B
0  a  0
1  a  1

在循环vDataFrame

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'>

如果要在循环中修改DataFrames ,则需要使用dictionary key引用原始df

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

Dictionary of DataFrames

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}

检查一个DataFrame

print (dataframes['file1'])
    A  B
0  aa  0
1  aa  1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM