【发布时间】:2018-08-18 04:14:06
【问题描述】:
我有一列看起来像列表的 dtype 对象:
import pandas as pd
import numpy as np
raw = '/******/*******/******/data.txt'
df = pd.read_csv(raw, sep='\t')
df.head()
id val_0 val_1 val_2 feat_0 feat_1 feat_2 \
0 a 2 0 2 2 2 0
1 b 1 -1 1 1 1 -2
2 c 0 -2 -2 0 2 1
3 d -1 1 -1 -1 1 -2
4 e -2 2 0 -2 0 2
objs_0 objs_1 \
0 [u'word_0', u'word_1', u'word_2'] [u'word_0', u'word_1', u'word_2']
1 [u'word_0', u'word_1', u'word_2'] [u'word_0', u'word_1', u'word_2']
2 [u'word_0', u'word_1', u'word_2'] [u'word_0', u'word_1', u'word_2']
3 [u'word_0', u'word_1', u'word_2'] [u'word_0', u'word_1', u'word_2']
4 [u'word_0', u'word_1', u'word_2'] [u'word_0', u'word_1', u'word_2']
objs_2
0 [u'word_0', u'word_1', u'word_2']
1 [u'word_0', u'word_1', u'word_2']
2 [u'word_0', u'word_1', u'word_2']
3 [u'word_0', u'word_1', u'word_2']
4 [u'word_0', u'word_1', u'word_2']
df['objs_0'].values
array(["[u'word_0', u'word_1', u'word_2']",
"[u'word_0', u'word_1', u'word_2']",
"[u'word_0', u'word_1', u'word_2']",
"[u'word_0', u'word_1', u'word_2']",
"[u'word_0', u'word_1', u'word_2']"], dtype=object)
最终,我需要将此 df 转换为“long”格式,并且我想使用此处的代码运行它: pandas: When cell contents are lists, create a row for each element in the list
但问题是我无法将这些字符串转换为列表。
我已经试过了:
df['objs_0'] = df['objs_0'].apply(lambda row: list(row))
df['objs_0']
但这只是按字符分解整个字符串。 此外,我的“字符串列表”的长度不可预测,所以我不能依赖 str.partition() 方法。对此的任何帮助将不胜感激!
【问题讨论】:
-
你希望输出是什么样的?