Python 从多个数据帧生成数据帧值

Python 从多个数据帧生成数据帧值,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试构建一个数据框架,其中的数据是从多个文件中抓取的。我已经创建了一个具有所需形状的空数据框,但在获取数据时遇到了问题。我发现,但当我发现时,我仍然得到NaN值。 Edit2:我更改了df创建的顺序,并将concat放入for循环中,得到了相同的结果。(理由显而易见) 两个示例数据帧:(注意不同的形状) 电流输出: 01-22-2020 01-23-2020 ... 04-09-2020 04-10-2020 World

我正在尝试构建一个数据框架,其中的数据是从多个文件中抓取的。我已经创建了一个具有所需形状的空数据框,但在获取数据时遇到了问题。我发现,但当我发现时,我仍然得到NaN值。 Edit2:我更改了
df
创建的顺序,并将concat放入for循环中,得到了相同的结果。(理由显而易见)

两个示例数据帧:(注意不同的形状)

电流输出:

                   01-22-2020 01-23-2020  ... 04-09-2020 04-10-2020
World                     NaN        NaN  ...        NaN        NaN
Afghanistan               NaN        NaN  ...        NaN        NaN
Albania                   NaN        NaN  ...        NaN        NaN
Algeria                   NaN        NaN  ...        NaN        NaN
Andorra                   NaN        NaN  ...        NaN        NaN
...                       ...        ...  ...        ...        ...
West Bank and Gaza        NaN        NaN  ...        NaN        NaN
Western Sahara            NaN        NaN  ...        NaN        NaN
Yemen                     NaN        NaN  ...        NaN        NaN
Zambia                    NaN        NaN  ...        NaN        NaN
Zimbabwe                  NaN        NaN  ...        NaN        NaN

[186 rows x 80 columns]
所需输出:(其中NaN等于目标列或所有列列表中的相应值,即:如果['confirm'],则为0,1,2,3,4,如果全部,则为[0,0,0],[1,0,0],[2,0,0])

您的代码(内嵌注释):

将熊猫作为pd导入
导入操作系统
导入glob
def daily_country_framer():
#创建作业
country\u source=r“C:\Users\USER\PycharmProjects\Corona Stats\country Series”
文件列表=glob.glob(国家/地区\u来源+r“\*.csv”)
最新的\u文件=max(列出\u文件,key=os.path.getctime)
最后一帧=pd.read\u csv(最新的\u文件)
日期列表=[]
标签列表=[]
#生成日期列表值
对于os.listdir(国家/地区来源)中的文件:
file=file.replace('.csv','')
日期列表。追加(文件)
#构建国家/地区列表值
对于最后一帧['country']中的国家:#==最后一帧['country']。tolist()
标签列表。附加(国家)
#为文件夹中的每个文件创建数据帧
对于os.listdir(国家/地区来源)中的文件名:
filepath=os.path.join(国家/地区\来源,文件名)
如果不是os.path.isfile(文件路径):
持续
df1=pd.read\u csv(文件路径)
#为循环中的每个文件重新定义df1。所以如果有
#有10个文件,只有最后一个文件在任何地方实际使用
#在这个循环之外。
df=pd.DataFrame(索引=标签列表,列=日期列表)
df1=pd.concat([df])
#在这里,您刚刚再次将df1定义为
#您刚才在上面一行中创建的空数据帧。
打印(df1)
每日(国家)
希望这能说明为什么你会得到你想要的结果。它正在做你要求它做的事情

您要做的是获取一个字典,其中日期作为键,关联的数据帧作为值,然后将其连接起来。这可能会非常昂贵,因为pandas的连接方式有一些奇怪之处,但如果您沿axis=0进行连接,就可以了

更好的方法可能是:

将熊猫作为pd导入
导入操作系统
def daily_country_framer(国家/地区来源):
累加器={}
#生成日期列表值
对于os.listdir(国家/地区来源)中的文件名:
日期=文件名。替换('.csv','')
filepath=os.path.join(国家/地区\来源,文件名)
累加器[日期]=pd.read\u csv(文件路径)
#现在我们有了一个{date:data}字典——太完美了!
df=局部放电电流(蓄能器)
返回df
每日国家(C:\Users\USER\PycharmProjects\Corona Stats\country Series)

这行得通吗?

也许通过外部合并(在国家/地区)?总之,您将更容易将您的最终df视为一个时间序列(意味着在当前输出中旋转一个),日期索引为datetime类型我尝试了
df=pd.DataFrame(index=label\u list,columns=date\u list)
,它返回时带有
keyrerror:'Country'
。设置
索引=['Country']
是否导致我的错误?尝试打印(键入(df['Country'])会返回相同的错误。哦,等等,你到底想实现什么?您能否提供一个所需输出的示例(因为您每天按国家/地区列出4列,最后每个国家/地区只有一个每日值)。顺便说一句,有些东西可能会帮助您在Python中浏览mergin:我试图为每个国家的每个日期找到相应的NaN值。每个值都可以是一个目标列,也可以是一个列表中的所有列值,以后可以对其进行索引<代码>世界-5-12-22-31;国家/地区1-0-0-1-1
                Country  Confirmed  Deaths  Recovered
0                 World    1595350   95455     353975
1           Afghanistan        484      15         32
2               Albania        409      23        165
3               Algeria       1666     235        347
4               Andorra        583      25         58
..                  ...        ...     ...        ...
180             Vietnam        255       0        128
181  West Bank and Gaza        263       1         44
182      Western Sahara          4       0          0
183              Zambia         39       1         24
184            Zimbabwe         11       3          0

[185 rows x 4 columns]
                Country  Confirmed  Deaths  Recovered
0                 World    1691719  102525     376096
1           Afghanistan        521      15         32
2               Albania        416      23        182
3               Algeria       1761     256        405
4               Andorra        601      26         71
..                  ...        ...     ...        ...
181  West Bank and Gaza        267       2         45
182      Western Sahara          4       0          0
183               Yemen          1       0          0
184              Zambia         40       2         25
185            Zimbabwe         13       3          0

[186 rows x 4 columns]
                   01-22-2020 01-23-2020  ... 04-09-2020 04-10-2020
World                     NaN        NaN  ...        NaN        NaN
Afghanistan               NaN        NaN  ...        NaN        NaN
Albania                   NaN        NaN  ...        NaN        NaN
Algeria                   NaN        NaN  ...        NaN        NaN
Andorra                   NaN        NaN  ...        NaN        NaN
...                       ...        ...  ...        ...        ...
West Bank and Gaza        NaN        NaN  ...        NaN        NaN
Western Sahara            NaN        NaN  ...        NaN        NaN
Yemen                     NaN        NaN  ...        NaN        NaN
Zambia                    NaN        NaN  ...        NaN        NaN
Zimbabwe                  NaN        NaN  ...        NaN        NaN

[186 rows x 80 columns]