【问题标题】:Convert numpy array of array to dataframe of string将数组的numpy数组转换为字符串的数据帧
【发布时间】:2021-05-19 04:59:06
【问题描述】:

我无法将我的数组数组转换为字符串数组:

import numpy as np

X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

我想构建一个看起来像这样的数据框:

     "coordinate"
   0   '-1 -1'
   1   '-2 -1'
   2   '-3 -2'
   3   '1 1'
   4   '2 1'
   5   '3 2'

【问题讨论】:

    标签: python arrays dataframe numpy-ndarray


    【解决方案1】:

    这里有几种方法可以做到这一点 -

    使用列表理解

    1. 使用 str(i) 将 X 元素转换为字符串
    2. 使用列表解析遍历每一行,并使用' '.join(i) 在其间加入空格
    3. 转换为列名为“coordinates”的数据框
    data = [' '.join(str(i)) for i in X]
    df = pd.DataFrame(data, columns=['coordinates'])
    print(df)
    
      coordinates
    0       -1 -1
    1       -2 -1
    2       -3 -2
    3         1 1
    4         2 1
    5         3 2
    

    使用 Numpy

    1. 使用.astype(str)将X元素转换为字符串
    2. 然后您可以在轴 1 上应用 ' '.join() 来连接数组
    3. 转换为列名为“coordinates”的数据框
    data = np.apply_along_axis(' '.join, 1, X.astype(str))
    df = pd.DataFrame(data, columns=['coordinates'])
    print(df)
    
      coordinates
    0       -1 -1
    1       -2 -1
    2       -3 -2
    3         1 1
    4         2 1
    5         3 2
    

    与熊猫

    你也可以用 pandas 做到这一点。

    df = pd.DataFrame(X)
    df = df[0].map(str)+' '+df[1].map(str)
    df = pd.DataFrame(df, columns=['coordinates'])
    print(df)
    
      coordinates
    0       -1 -1
    1       -2 -1
    2       -3 -2
    3         1 1
    4         2 1
    5         3 2
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式实现此目的:

      import pandas as pd
      import numpy as np
      
      X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
      
      df = pd.DataFrame(columns=['coordinate'])
      
      for index, item in enumerate(X):                                                                
          df.at[index, 'coordinate'] = ' '.join(item.astype(str))
      
      

      结果:

      print(df)
      
      coordinate
      0      -1 -1
      1      -2 -1
      2      -3 -2
      3        1 1
      4        2 1
      5        3 2
      

      【讨论】:

        【解决方案3】:

        例如,您可以使用 f 字符串和列表推导来执行此任务。 例如:

        X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

        X_string = np.array([f"{i[0]} {i[1]}" for i in X])

        pd.DataFrame(data=X_string, columns=["coordinates"])

        输出将与预期完全相同。但我认为这不是您任务的最佳设计。如果我是你,我可能会将坐标列分成两个单独的列(例如“lat”和“lon”)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-05
          • 2018-09-19
          • 2021-04-26
          • 2015-03-28
          • 2016-03-10
          • 2018-02-18
          相关资源
          最近更新 更多