【问题标题】:Converting each row of a dataframe into a string and assigning it as a column to another dataset in pandas将数据帧的每一行转换为字符串并将其作为列分配给熊猫中的另一个数据集
【发布时间】:2020-05-31 16:15:40
【问题描述】:

我有一个数据集:

id   name   address   phone   email
123  abc    123 abc   12345   info@abc.com
456  cbs    456 cbs   67890   info@cbs.com
758  nbc    789 nbc   11121   info@nbc.com

我想创建一个新数据集,其中保留前两列(id 和 name)并具有第三列,其中将包含一个字符串,该字符串是地址、电话和电子邮件值的组合。换句话说,我需要它看起来像这样:

id   name   meta_str
123  abc    '123 abc   12345   info@abc.com'
456  cbs    '456 cbs   67890   info@cbs.com'
758  nbc    '789 nbc   11121   info@nbc.com'

这是我的代码:

df_transformed = df[['id','name']]
df_meta = df[['address','phone','email']]
df_meta_str = df_meta.iloc[:].to_string(header=False, index=False)
df_transformed['meta_str'] = df_meta_str

但我得到的是:

id   name   meta_str
123  abc    '123 abc   12345   info@abc.com'
456  cbs    '123 abc   12345   info@abc.com'
758  nbc    '123 abc   12345   info@abc.com'

我认为问题在于 df_meta_str 将所有行中的数据组合为一个大字符串。

有什么方法可以在单独的行上实现单独的字符串?

【问题讨论】:

    标签: python-3.x pandas string dataframe data-conversion


    【解决方案1】:

    我会的

    df['meta_str']=df.loc[:,'address':].astype(str).agg(' '.join,1)
    0    123abc 12345 info@abc.com
    1    456cbs 67890 info@cbs.com
    2    789nbc 11121 info@nbc.com
    dtype: object
    

    【讨论】:

      【解决方案2】:

      你可以使用简单的str concatenation:

      df['meta_str'] = df.address + ' ' + df.phone.astype(str) + ' ' + df.email 
      
      df.drop(['address','phone','email'], 1, inplace=True)
      

      输出:

      id   name   meta_str
      123  abc    123 abc 12345 info@abc.com
      456  cbs    456 cbs 67890 info@cbs.com
      758  nbc    789 nbc 11121 info@nbc.com
      

      使用df.apply方法:

      df['meta_str'] = df[['address','phone','email']].apply(lambda row: ' '.join(row.values.astype(str)), axis=1)
      

      【讨论】:

        【解决方案3】:

        您可以在此处使用pd.Series.cat

        df['meta_str'] = df['address'].str.cat(df[['phone','email']].astype(str),sep=' ')
        df.drop(columns='address')
        
           id   name   meta_str
        0  123  abc    123 abc 12345 info@abc.com
        1  456  cbs    456 cbs 67890 info@cbs.com
        2  758  nbc    789 nbc 11121 info@nbc.com
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-18
          • 1970-01-01
          • 2018-12-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多