【问题标题】:Select a subset of an object type cell in panda Dataframe在熊猫数据框中选择对象类型单元格的子集
【发布时间】:2020-04-11 14:37:21
【问题描述】:

我尝试使用 str.split(pat="'") 选择对象类型列单元格的子集

dataset['pictures'].str.split(pat=",")

我想获取数字 40092 和 39097 的值以及图片的两个日期作为两列 ID 和 DATE,但结果我得到一列由 NaN 组成。

'pictures' column:
{"col1":"40092","picture_date":"2017-11-06"}
{"col1":"39097","picture_date":"2017-10-31"}
...

【问题讨论】:

  • 使用dataset['pictures'].iloc[x]
  • @Infinity。使用 iloc 您只能选择一个特定的单元格,但我需要将此单元格拆分为两个不同的单元格,其中仅包含 ID 号和日期。
  • df2 = pd.concat([df['ID'], df['date']], axis = 1)怎么样
  • 列 ID 和日期不存在但我需要从这一列“图片”中创建它们。挑战在于将它们从这长串中剪掉,并去掉它们之间不必要的部分。

标签: python string pandas subset cell


【解决方案1】:

这是我从你的问题中了解到的:

您有一个 pandas 数据框,其中一列包含 json 字符串(或任何其他需要解析为多列的字符串)

例如

df = pd.DataFrame({'pictures': [
    '{"col1":"40092","picture_date":"2017-11-06"}',
    '{"col1":"39097","picture_date":"2017-10-31"}']
     })

您希望将两个元素(“col1”和“picture_date”)解析为两个单独的列以供进一步处理(或者可能只是其中一个)

定义解析行的函数:

import json

def parse_row(r):
  j=json.loads(r['pictures'])
  return j['col1'],j['picture_date']

并使用 Pandas DataFrame.apply() 方法如下

df1=df.apply(parse_row, axis=1,result_type='expand')

结果是一个包含两列的新数据框 - 每列都包含解析后的数据:

        0           1
 0  40092  2017-11-06
 1  39097  2017-10-31

如果您只需要一列,则可以从 parse_row 返回单个元素(而不是上面示例中的两个元素元组)并使用 df.apply(parse_row)

如果值不是json格式,只需相应修改parse_row(拆分,将字符串转换为数字等)

【讨论】:

    【解决方案2】:

    感谢您的回复,但我通过将数据集中的“图片”列加载到列表中来解决了这个问题:

    picturelist= dataset['pictures'].values.tolist()
    

    然后创建由列图片组成的列表的数据框,并将其与没有图片列的原始数据集连接

    two_new_columns = pd.Dataframe(picturelist)
    new_dataset = pd.concat(dataset, two_new_columns)
    

    【讨论】:

      猜你喜欢
      • 2016-01-28
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 2018-09-30
      • 2014-06-21
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多