我收到以下错误:
File "/packages/pandas/core/common.py", line 380, in _asarray_tuplesafe
result[:] = [tuple(x) for x in values]
TypeError: 'numpy.int64' object is not iterable
运行时:
df.apply(lambda row: (df2.append(([row]*(row[6].split(',').__len__())), ignore_index=True)), axis=1)
目标是向每个原始数据帧行(df
)申请N次附加到空df(df2
)。其中N是特定字段row[6]
具有的值数。
示例行用于df
:
编号 | 列表
0 | 126
1 | 126,127,304,305
df2
应该是:
编号 | 列表
0 | 126
1 | 126
1 | 127
1 | 304
1 | 305
您可以看到我尝试将行作为列表发送,但两者都不起作用。有想法吗?
答案 0 :(得分:1)
这是split
之后使用unnesting
的一种方法
df.List=df.List.str.split(',')
unnesting(df,['List'])
Out[466]:
List Id
0 126 0
1 126 1
1 127 1
1 304 1
1 305 1
def unnesting(df, explode):
idx = df.index.repeat(df[explode[0]].str.len())
df1 = pd.concat([
pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
df1.index = idx
return df1.join(df.drop(explode, 1), how='left')