2014-11-05 275 views
0

我需要创建一个熊猫系列,其中的元素每个都是来自DataFrame的行的函数。具体来说,这是一个'元数据'列,它是一个json字符串,我想要一系列json加上其余列的字典。理想的情况是我希望的数据框的东西等同于地图的方法:将熊猫数据框行映射为熊猫系列

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无线th这个列表的内容:

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

你可以发布一个小例子集?理想情况下,这将是我们可以复制,然后立即加载'pandas.read_clipboard()'(自己测试以检查)的东西 – Marius 2014-11-05 00:53:42

回答

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} 
+0

您当然可以玩字符串来产生时间戳的零,我不知道它们是哪个规则应该遵循 – Daniele 2014-11-05 14:13:51

+0

我宁愿将一个键值映射保存在系列中,但这适用于我的特定情况。谢谢 – fakedrake 2014-11-06 12:05:30