当前位置: 首页 > 知识库问答 >
问题:

Python:如何将数据帧的字典变成一个大数据帧,列名是前一个判决的关键?

薛承基
2023-03-14

所以我的数据框是由许多单独的excel文件组成的,每个文件都以日期为文件名,并在电子表格中显示当天水果的价格,所以电子表格看起来像这样:

15012016:
Fruit     Price
Orange    1
Apple     2
Pear      3

16012016:
Fruit     Price
Orange    4
Apple     5
Pear      6

17012016:
Fruit     Price
Orange    7
Apple     8
Pear      9

因此,为了将所有这些信息放在一起,我运行以下代码将所有信息放入数据帧字典中(所有水果价格文件存储在“C:\fruit\u Prices\u by\u Day”中)

#find all the file names
file_list = []
for x in os.listdir('C:\Fruit_Prices_by_Day'):
    file_list.append(x) 

file_list= list(set(file_list))

d = {}

for date in Raw_list:
    df1 = pd.read_excel(os.path.join('C:\Fruit_Prices_by_Day', date +'.xlsx'), index_col = 'Fruit')
    d[date] = df1

这就是我被困的地方。然后,我如何将这个dict放入一个数据框,其中列名是dict键,即日期,这样我就可以在同一个数据框中得到每天每个水果的价格,如:

          15012016   16012016   17012016   
Orange    1          4          7
Apple     2          5          8
Pear      3          6          9

共有3个答案

羊舌和安
2023-03-14

类似这样的方法可以工作:在字典上循环,用字典键添加常量列,连接,然后将日期设置为索引

pd.concat(
    (i_value_df.assign(date=i_key) for i_key, i_value_df in d.items())
).set_index('date')
宦书
2023-03-14

解决方案:

pd.concat(d, axis=1).sum(axis=1, level=0)

说明:

.concat(d,轴=1)之后,您将获得

        15012016  16012016  17012016
        Price     Price     Price
Fruit                               
Orange       1         4         7
Apple        2         5         8
Pear         3         6         9

添加.sum(轴=1,级别=0)将其转换为

        15012016  16012016  17012016
Fruit                               
Orange       1         4         7
Apple        2         5         8
Pear         3         6         9
尹小云
2023-03-14

您可以先尝试设置理解中所有数据帧的索引,然后使用concat删除列中最后一级的多索引

 print d
{'17012016':     Fruit  Price
0  Orange      7
1   Apple      8
2    Pear      9, '16012016':     Fruit  Price
0  Orange      4
1   Apple      5
2    Pear      6, '15012016':     Fruit  Price
0  Orange      1
1   Apple      2
2    Pear      3}
d = { k: v.set_index('Fruit') for k, v in d.items()}

df = pd.concat(d, axis=1)
df.columns = df.columns.droplevel(-1) 
print df
        15012016  16012016  17012016
Fruit                               
Orange         1         4         7
Apple          2         5         8
Pear           3         6         9

 类似资料:
  • 情况: 两个数据帧(df1和df2)具有相同的三个索引,例如“A”、“B”、“C”。df1和df2的列数不同。df1和df2中的所有单元格都填充了float类型的数据。 DF1: DF2: 目标: 从df2中选择的列(例如“BBB”)与df1的每列相加后,结果应存储在新的数据帧(df_new)中。df_new的格式应为df1(列数和行数),并具有与df1相同的列名和索引。 new_df: 我的做法

  • 我有两个数据框,都包含英文和中文单词字符串,我想知道其中一个是另一个的子集:

  • 我有两个不同列数和行数的CSV文件。第一个CSV文件有M列和N行,第二个文件有H列和G行。一些列具有相同的名称。 null 另外,如果两个CSV文件有两个数据帧,并希望这样做,例如,如果我将第一个CSV加载到中,将第二个加载到中,然后希望合并到,类似于上面的示例。

  • 我有两个数据帧df1和df2 df1如下 df2就像 我想根据df2中与df1中的列名匹配的单元格值将值从df1复制到df2,所以我的df3应该看起来像 df3 基本上,我想根据df2的单元格值(df1中的列名)从df1复制df2中的列 如果它仍然令人困惑,请告诉我

  • 我有两个数据帧,它们的列名相同,但行数不同。第一个数据帧(a)看起来与此类似: 注:站点5、6、8和12故意丢失。 第二个数据帧(b)看起来像这样: 我想要实现的是: 在那里我注入(我肯定有一个更好的术语)数据帧b到数据帧a的数据,但是我想用零替换b中的任何NAs,并保持a中的NAs不变。 我发现并尝试了这个代码: 但它会带来NAs。我考虑先将NAs替换为零,但即使如此,它也会抹去我目前在数据帧a

  • 我有两个数据帧df1和df2。df1就像一个具有以下值的字典 df2具有以下值: 我想基于df1数据帧中的,将df2拆分为3个新的数据帧。 日期,TLRA_权益栏应位于数据框 预期产出: > 数据帧 消费者,非周期性数据帧 请让我知道如何有效地做。我想做的是连接列名,例如,然后根据列名的前半部分分割数据帧。 代码: 但这很复杂。需要更好的解决方案。