【问题标题】:Pandas Concat increases number of rowsPandas Concat 增加行数
【发布时间】:2018-10-26 08:19:07
【问题描述】:

我正在连接两个数据帧,所以我想将一个数据帧定位到另一个数据帧。 但首先我对初始数据框进行了一些转换:

scaler = MinMaxScaler() 
real_data = pd.DataFrame(scaler.fit_transform(df[real_columns]), columns = real_columns)

然后连接:

categorial_data  = pd.get_dummies(df[categor_columns], prefix_sep= '__')
train = pd.concat([real_data, categorial_data], axis=1, ignore_index=True)

我不知道为什么,但是行数增加了:

print(df.shape, real_data.shape, categorial_data.shape, train.shape)
(1700645, 23) (1700645, 16) (1700645, 130) (1703915, 146)

发生了什么以及如何解决问题?

如您所见,train 的列数等于 real_data 和 categorial_data 列的总和

【问题讨论】:

标签: python python-3.x pandas concat


【解决方案1】:

问题在于,有时当您对单个数据框对象执行多个操作时,索引会保留在内存中。所以使用 df.reset_index() 会解决你的问题。

【讨论】:

  • 跑在同一个问题上,要增加精度,请在要连接在一起的数据帧上使用 df.reset_index() 方法,而不是在结果数据帧上。
【解决方案2】:

我使用hstack解决了这个问题

train = pd.DataFrame(np.hstack([real_data,categorial_data]))

【讨论】:

  • 这样你会丢失所有的数据框信息(例如列名、索引)
  • @Tonca 如何保留所有数据框信息?
  • 在这种情况下,这些列很容易保留,因为它们与原始数据框保持相同。问题来自于索引。如果 concat 返回不同数量的行(如问题中所述),则意味着 DF 的索引不相同。我认为应该更好地理解它们为什么不同而不是强制连接。
【解决方案3】:

当连接的数据帧的索引不同时会发生这种情况。预处理后,结果数据帧的索引被删除。将每个数据帧的索引设置回原始作品,即df_concatenated.index = df_original.index

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2017-09-29
    相关资源
    最近更新 更多