如何在python中将一行拆分为多行



我有一个pandas数据框架,它有一个长行,这是一个扁平json列表的结果。我想从这个例子开始:{'0_id': 1, '0_name': a, '0_address': USA, '1_id': 2, '1_name': b, '1_address': UK, '1_hobby': ski}到如下所示的表:

<表类> id 名称 地址 爱好 tbody><<tr>1美国2b英国滑雪

好了:

import json

json_data = '{"0_id": 1, "0_name": "a", "0_address": "USA", "1_id": 2, "1_name": "b", "1_address": "UK", "1_hobby": "ski"}'
arr = json.loads(json_data)
result = {}

for k in arr:
kk = k.split("_") 
if int(kk[0]) not in result: 
result[int(kk[0])] =  {"id":"", "name":"", "hobby":""}
result[int(kk[0])][kk[1]] = arr[k]

for key in result:
print("%s %s %s" % (key, result[key]["name"], result[key]["address"]))

如果你想让字段更动态,你有两个选择-要么遍历所有数组并收集所有可能的名称,然后构建与模板相关的空数组,或者在返回结果时检查结果中是否存在key:)

这种方法只有在每个列都遵循此模式时才有效,否则应该非常健壮。

data = {'0_id': '1', '0_name': 'a', '0_address': 'USA', '1_id': '2', '1_name': 'b', '1_address': 'UK', '1_hobby': 'ski'}
df = pd.DataFrame(data, index=[0])
indexes = set(x.split('_')[0] for x in df.columns)
to_concat = []
for i in indexes:
target_columns = [col for col in df.columns if col.startswith(i)]
df_slice = df[target_columns]
df_slice.columns = [x.split('_')[1] for x in df_slice.columns]
to_concat.append(df_slice)
new_df = pd.concat(to_concat)

最新更新