【问题标题】:Merging two DataFrames in Pandas results in NaNs in the new merged DF在 Pandas 中合并两个 DataFrame 会在新合并的 DF 中产生 NaN
【发布时间】:2019-09-07 02:37:32
【问题描述】:

我在 Pandas 中有两个 DataFrame,我想将它们连接在一起(我认为是合并),当我这样做时,生成的 DataFrame 具有新 DataFrame 右侧部分的所有 NaN。这是一个简化的示意图:

DF_Left

     station_name     trips    date_zip
0    Mountain View     100   95113 2013-08-29
1    San Francisco     190   95113 2012-04-12
2    San Jose          109   94107 2013-09-01

DF_Right

      max_temperature     wind_speed   date_zip
0      79                   2       95113 2013-08-29
1      67                   3       95113 2012-04-12
2      64                   1       94107 2013-09-01

左边大约有 40K 行,右边有 1500 行。 我想要做的是合并两者,以便根据 date_zip 列将 DF_Right 添加到 DF_Left 中。 所以我真正想要的是

DF_正确

     station_name     trips    date_zip         max_temperature   wind_speed
0    Mountain View     100   95113 2013-08-29   79                     2                          
1    San Francisco     190   95113 2012-04-12   67                     3                     
2    San Jose          109   94107 2013-09-01   64                     1

当我这样做时

DF_Correct = pd.merge(DF_Left, DF_Right,   left_on=['date_zip'], right_on = ['date_zip' ], how='left')

我得到了我想要的,除了所有天气栏现在都是 NaN。 我不确定这里的术语,所以我认为合并是我想要的,但我不确定我的数据发生了什么。

【问题讨论】:

  • 这意味着两个数据帧的 date_zip 值不匹配。检查 DF_Left.dtypes、DF_Right.dtypes 和两者的 date_zip 中的唯一值
  • 您的代码对我来说很好用。可能需要检查您的 df_left 和 df_right 的类型是否相同。它们都是字符串吗?
  • 尝试DF_Left['date_zip'] = DF_Left['date_zip'].str.strip(),然后对DF_Right执行完全相同的操作,然后尝试合并。
  • 是的,有一个明显的不匹配——我之前没有检查过,每个 DF 中的日期格式不同。 mm-dd-yyyy 与 mm/dd/yyyy 在另一个。现在可以使用了!

标签: python pandas dataframe


【解决方案1】:

请检查数据以确保数据/类型正确。在代码下方找到,尝试使用您的示例。测试运行良好

import pandas as pd
df1 = pd.DataFrame({'station_name': ['Mountain View','San Francisco','San Jose','San Jose'],
                   'trips': [100,190,109,110],
                   'date_zip': ['95113 2013-08-29','95113 2012-04-12','94107 2013-09-01','94107 2013-09-02']})
df2 = pd.DataFrame({'wind_speed': [2,3,1],
                   'max_temperature': [79,67,64],
                   'date_zip': ['95113 2013-08-29','95113 2012-04-12','94107 2013-09-01']})

DF_Correct = pd.merge(df1, df2, on='date_zip', how='left')

【讨论】:

    【解决方案2】:

    到目前为止,我从问题中了解到,下面的代码应该给出所需的答案。

    DF_Correct = pd.merge(DF_Right, DF_Left ,  how='left', on='date_zip')
    

    【讨论】:

      猜你喜欢
      • 2021-07-16
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多