【发布时间】:2014-11-23 23:05:33
【问题描述】:
我在 pandas Series 中有按行嵌套的键值对。将它们分成单独的列的最有效/优化的方法是什么? (我可以解压缩并进行转换,但是最好的方法是什么?)
我不知道:
- 事先输入键名
- 每条记录中的键数
- 每条记录中键的顺序
这些行是 unicode 字符串的列表。提取后,值将始终为 bigint。
输入:
parsedSeries.head()
0 [key1=774, key2=238]
1 [key1=524, key2=101, key3=848]
2 [key3=843]
3 [key1=232, key3=298, key2=457]
预期输出:
record key1 key2 key3
0 774 238 NAN
1 524 101 848
2 NAN NAN 843
3 232 457 298
请注意,输入由包含格式为 u"X=Y" 的 Unicode 字符串的列表组成,其中 X 被假定为遵守在 Python 中用作属性名称所需的任何约定,并且 Y 始终可以被解释作为整数。例如,可以使用以下内容来构造上面的示例数据:
pandas.Series([[u"key1=774", u"key2=238"],
[u"key1=524", u"key2=101", u"key3=848"],
[u"key3=843"],
[u"key1=232", u"key3=298", u"key2=457"]])
【问题讨论】:
-
parsedSeries.ix[0]的类型是什么。您的示例显示了[key1=774, key2=238],但这是什么?不能是列表,是dict吗?您是否有一个系列,其中每个条目都是dict?还是它被组织成一个 2 元组的序列,还是什么? -
这是一个列表... In [81]: type(parsedSeries.ix[0]) Out[81]: list.我将 str.split 应用于 df 以创建该列表
-
好的,那么
type(parsedSeries.ix[0][0])是什么? -
它是 Unicode。谢谢!
-
所以它是一个 Unicode 字符串列表,因此每个字符串的格式为
u"X=Y",其中X将被解释为列名,Y作为当前列的值排?那是对的吗?Y是否有固定的数据类型?你还能保证X遵守正确的 Python 属性命名约定吗? (例如,它不是一个带有点(.)的字符串......)
标签: python performance parsing pandas