【问题标题】:Mapping pandas DataFrame rows to a pandas Series将 pandas DataFrame 行映射到 pandas Series
【发布时间】:2014-11-05 22:07:38
【问题描述】:

我需要创建一个 pandas 系列,其元素每个都是 DataFrame 中一行的函数。具体来说,这是一个“元数据”列,它是一个 json 字符串,我想要一系列 dicts,它们是 json 加上其余的列。理想情况下,我想要与数据框的 map 方法等效的东西:

df.map(lambda row: json.loads(row.metadata).update({'timestamp':row.timestamp}))

(更新是破坏性的,不会返回新的字典,但你明白了)

编辑:你可以复制这个

metadata    timestamp
"{'a':1,'b':2}" 000000001
"{'a':1,'c':2}" 000000002
"{'a':1,'c':2}" 000000003

并用

加载它
In [8]: import pandas as pd

In [9]: pd.read_clipboard()
Out[9]:
        metadata  timestamp
0  {'a':1,'b':2}          1
1  {'a':1,'c':2}          2
2  {'a':1,'c':2}          3

所需的结果应该是带有此列表内容的 pandas.Series:

[{"a":1,"b":2,"timestamp":000000001}
{"a":1,"c":2,"timestamp":000000002}
{"a":1,"c":2,"timestamp":000000003}]

【问题讨论】:

  • 你能发布一个小的示例数据集吗?理想情况下,这将是我们可以复制然后立即使用pandas.read_clipboard() 加载的内容(自己测试以检查)

标签: python pandas


【解决方案1】:

如何修改字符串? 比如:

new_metadata = df.apply(lambda x: '{}\b,"timestamp":{}}}'.format(x.metadata,x.timestamp),axis=1)

产生:

In [1]: new_metadata
Out[2]: 
0    {'a':1,'b':2,"timestamp":1}
1    {'a':1,'c':2,"timestamp":2}
2    {'a':1,'c':2,"timestamp":3}

【讨论】:

  • 你当然可以玩字符串来产生时间戳的零,我不知道他们应该遵循哪些规则
  • 我宁愿在系列中保存一个键值映射,但这适用于我的具体情况。谢谢
猜你喜欢
  • 2023-03-11
  • 2016-09-02
  • 2021-06-18
  • 2018-07-13
  • 2012-11-18
  • 2012-11-24
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
相关资源
最近更新 更多