Python 如何替换列表中的多个项目并为其创建数据帧?
我有一个非常复杂的列表,我试图改变两件事:Python 如何替换列表中的多个项目并为其创建数据帧?,python,pandas,list,dataframe,Python,Pandas,List,Dataframe,我有一个非常复杂的列表,我试图改变两件事: id必须变成id Field1必须变成Value1 在那之后,我尝试为它制作一个整洁的数据框架。这是我的预期结果: ID - Value1 0 1 - 1235 1 2 - 5631 2 3 - 9875 3 4 - 2683 4 5 - 97525 5 6 - 6614 我的列表如下所示: my_list = [('www.url1.com'), 1000, [
id
必须变成id
Field1
必须变成Value1
ID - Value1
0 1 - 1235
1 2 - 5631
2 3 - 9875
3 4 - 2683
4 5 - 97525
5 6 - 6614
我的列表
如下所示:
my_list = [('www.url1.com'), 1000, [{'id': 1, 'Field1': 1235}, {'id': 2, 'Field1': 5631}, {'id': 3, 'Field1': 9875}, 'www.google.com)'],
('www.url1.com'), 1000, [{'id': 4, 'Field1': 2683}, {'id': 5, 'Field1': 97525}, {'id': 6, 'Field1': 6614}, 'www.google.com)']]
ID Value1
0 1 1235
1 2 5631
2 3 9875
3 4 2683
4 5 97525
5 6 6614
这是我试图使用的代码。我没有得到任何错误,但也没有得到预期的结果
import pandas as pd
my_list = [('www.url1.com'), 1000, [{'id': 1, 'Field1': 1235}, {'id': 2, 'Field1': 5631}, {'id': 3, 'Field1': 9875}, 'www.google.com)'],
('www.url1.com'), 1000, [{'id': 4, 'Field1': 2683}, {'id': 5, 'Field1': 97525}, {'id': 6, 'Field1': 6614}, 'www.google.com)']]
for n, i in enumerate(my_list):
if i == 'id':
my_list[n] = 'ID'
# print(my_list)
df = pd.DataFrame(my_list)
#print(df)
列表中需要的数据。您可以使用
isinstance
筛选列表,然后在列表中选择其类型为dict
的所有元素,然后使用新键创建新字典{id':'id','Field1':'Value1'}
keys = {'id': 'ID', 'Field1': 'Value1'}
res = []
for x in my_list:
if isinstance(x, list):
res += [{keys[k]: y[k] for k in keys} for y in x if isinstance(y, dict)]
df = pd.DataFrame(res)
print(df)
使用列表理解
keys = {'id': 'ID', 'Field1': 'Value1'}
res = [y for x in my_list if isinstance(x, list) for y in x if isinstance(y, dict)]
df = pd.DataFrame(res).rename(columns=keys)
输出:
my_list = [('www.url1.com'), 1000, [{'id': 1, 'Field1': 1235}, {'id': 2, 'Field1': 5631}, {'id': 3, 'Field1': 9875}, 'www.google.com)'],
('www.url1.com'), 1000, [{'id': 4, 'Field1': 2683}, {'id': 5, 'Field1': 97525}, {'id': 6, 'Field1': 6614}, 'www.google.com)']]
ID Value1
0 1 1235
1 2 5631
2 3 9875
3 4 2683
4 5 97525
5 6 6614
您可以仅选择带有ID的列表并将它们放在一起:
from functools import reduce
my_list = [('www.url1.com'), 1000, [{'id': 1, 'Field1': 1235}, {'id': 2, 'Field1': 5631}, {'id': 3, 'Field1': 9875}, 'www.google.com)'],
('www.url1.com'), 1000, [{'id': 4, 'Field1': 2683}, {'id': 5, 'Field1': 97525}, {'id': 6, 'Field1': 6614}, 'www.google.com)']]
a = reduce(lambda x,y: x+y,[my_list[2::3][i][-2::-1] for i in range(len(my_list[2::3]))])
pd.DataFrame(a).rename(columns = {"id":"ID","Field1":"Value1"})
输出:
ID Value1
0 3 9875
1 2 5631
2 1 1235
3 6 6614
4 5 97525
5 4 2683
如果需要,请按ID排序。为什么列表中的其他元素不包括在dataframe中?@deadshot,因为这些元素与我的dataframe.Thx无关。你做得很好,你能解释一下你做了什么吗?为什么当我将你的代码应用到一个更大的my_列表时,我没有得到结果?试着打印
res
它是空的吗?看起来很正常,但很复杂。。。谢谢你。