【问题标题】:Concatenation in Pandas PythonPandas Python 中的连接
【发布时间】:2018-01-22 14:47:28
【问题描述】:

我正在尝试连接这三列,但我使用的代码给了我这个输出,我将所有列的格式更改为字符串:

Income_Status_Number   Income_Stability_Number  Product_Takeup_Number  Permutation
      1                      1                          2                1.012
      2                      1                          3                2.013
      1                      1                          1               1.011

这是我使用的代码:

df['Permutation']=df['Income_Status_Number'].astype(str)+""+df['Income_Stability_Number'].astype(str)+""+df['Product_Takeup_Number'].astype(str)

但我希望我的输出如下所示:

Income_Status_Number   Income_Stability_Number  Product_Takeup_Number  Permutation
  1                      1                          2                     112
  2                      1                          3                     213
  1                      1                          1                     111

请帮忙。

【问题讨论】:

  • df['Permutation']=df['Income_Status_Number'].astype(str)+df['Income_Stability_Number'].astype(str)+df['Product_Takeup_Number'].astype(str) 更好,但它应该工作得很好。
  • 在每个串联之间添加""的目的是什么?

标签: python python-3.x python-2.7 pandas


【解决方案1】:

问题在于第一列被视为float 而不是int。解决这个问题的简单方法是将值与乘数相加,将数字放入正确的空间,让 pandas 意识到数字是int

df['Permutation'] = df['Income_Status_Number']*100 + df['Income_Stability_Number']*10 + df['Product_Takeup_Number']

另一种解决方案是先使用astype(int).astype 转换数字,但该解决方案有点慢:

10000 Runs Each

as_type
  Total: 9.7106s
  Avg: 971059.8162ns

Maths
  Total: 7.0491s
  Avg: 704909.3242ns

【讨论】:

    【解决方案2】:

    看起来您的第一列在您将其转换为字符串之前被读取为float

    df['Permutation']=df['Income_Status_Number'].astype(int).astype(str)+df['Income_Stability_Number'].astype(int).astype(str)+df['Product_Takeup_Number'].astype(int).astype(str)
    

    【讨论】:

      【解决方案3】:

      尝试使用以下代码将“排列”列添加到以您想要的方式格式化的数据框中:

      df['Permutation'] = df[df.columns[0:]].apply(lambda x: ''.join(x.dropna().astype(int).astype(str)),axis=1)
      

      它为您提供以下数据框:

      df
        Income_Status_Number Income_Stability_Number Product_Takeup_Number  \
      0                    1                       1                     2
      1                    2                       1                     3
      2                    1                       1                     1
      
        Permutation
      0         112
      1         213
      2         111
      

      【讨论】:

        【解决方案4】:

        我希望这个对你有用。

        df['Permutation'] = df[df.columns].apply(lambda x: ' '.join(x.dropna().astype(int).astype(str)),axis=1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-23
          • 2016-10-07
          • 1970-01-01
          • 2019-05-19
          • 2018-04-20
          • 2023-04-07
          • 2020-05-21
          • 1970-01-01
          相关资源
          最近更新 更多