【问题标题】:Pandas reshaping dataframe to required number of columns熊猫将数据框重塑为所需的列数
【发布时间】:2020-05-11 11:46:02
【问题描述】:

我有两个数据框,我需要将一个附加到另一个下方。不幸的是,这两个数据框的大小不同:

df1

Mon Tue Wed Thu Fri
11  65  45  76  90

df2
2   7   9   5

*df2 是日期格式

需要的输出如下:

df_new

Mon Tue Wed Thu Fri
11  65  45  76  90
2   7   9   5   0

我尝试了两个数据帧的追加/连接:

df_new = pd.DataFrame( np.concatenate( (df1.values, df2.values), axis=0 ) )

但我收到以下错误:

ValueError:连接轴的所有输入数组维度必须完全匹配,但沿维度 1,索引 0 处的数组大小为 5,索引 1 处的数组大小为 4

只要 df2 形状与 df1 形状不匹配,我想创建 0 值列。因此,我尝试重塑数据框以适应我对增加列的要求,但它不起作用:

new = pd.DataFrame(df2.values.reshape(1, 5))

但我收到以下错误:

ValueError: 无法将大小为 4 的数组重塑为形状 (1,5)

有什么办法吗?

请注意,df1 是一个可变数据帧,每次迭代时大小可能会增加或减少。有什么方法可以保持灵活性而不是实际指定 reshape 中的列数?

【问题讨论】:

  • df2 是系列还是数据框?
  • df1 和 df2 都是数据帧

标签: python pandas dataframe


【解决方案1】:
df1 = pd.read_clipboard()
df1
Mon Tue Wed Thu Fri
0   11  65  45  76  90
df2 = pd.read_clipboard(header=None)
    0   1   2   3
0   2   7   9   5

#get df1 and df2 to have similar names
mapp = dict(enumerate(df1.columns))
df2.columns = df2.columns.map(mapp)
#using @anky's suggestion : df2.columns=df1.columns[:df2.shape[1]]

#concatenate both dfs, and fillna on the null value
pd.concat((df1,df2)).fillna(0)


   Mon  Tue Wed Thu Fri
0   11  65  45  76  90.0
0   2   7   9   5   0.0

【讨论】:

  • 不错。我会补充的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多