gpt4 book ai didi

python - 为什么从数据框中检索单行作为字典而不是系列?

转载 作者:行者123 更新时间:2023-12-03 17:27:14 26 4
gpt4 key购买 nike

考虑以下代码:

import pandas as pd

activities = {
'id': ['34343', '11', '1234'],
'map': [
{'id': 5743, 'summary_polyline': 343434},
{'id': 95},
{'id': 86},
]
}

df = pd.DataFrame(activities)
has_polyline = df['map'].map(lambda x: True if x.get('summary_polyline') else False)
df = df.set_index(has_polyline)
df = df.loc[True]

print(df['map'])

打印出来的是一本字典:
{'id': 5743, 'summary_polyline': 343434}

但是,如果有多于两行包含折线:
    import pandas as pd

activities = {
'id': ['34343', '11', '1234'],
'map': [
{'id': 5743, 'summary_polyline': 343434},
{'id': 95, 'summary_polyline': 111}, # second True row
{'id': 86},
]
}

df = pd.DataFrame(activities)
has_polyline = df['map'].map(lambda x: True if x.get('summary_polyline') else False)
df = df.set_index(has_polyline)
df = df.loc[True]

print(df['map'])

一个 Series对象将被打印:
 map
True {'id': 5743, 'summary_polyline': 343434}
True {'id': 95, 'summary_polyline': 111}
Name: map, dtype: object

为什么会这样,我该怎么办 总是 获取 Series ,即使只有一个 True排?我需要一致的输出,因为我事先不知道有多少 True行会有。

最佳答案

如果我正确理解您的问题,那么当您使用索引来指示行是否为 has_polyline 时,您的问题就开始了。 .
当您按索引查看时,pandas 假定您正在查找特定行,因此它会将该行作为一个系列单独返回。查找特定列现在将为您提供该单元格中的对象。
如果多行具有相同的索引,pandas 只能将它们全部返回,因此现在查找列将为您提供一个系列。

您可以使用以下语法来避免这种行为:

import pandas as pd

activities = {
'id': ['34343', '11', '1234'],
'map': [
{'id': 5743, 'summary_polyline': 343434},
{'id': 95},
{'id': 86},
]
}

df = pd.DataFrame(activities)
has_polyline = df['map'].map(lambda x: True if x.get('summary_polyline') else False)
print(df[has_polyline]['map'])

在这里,你告诉 Pandas “取所有 has_polyline 为真的行,然后给我你得到的 df 的 'map' 列。

关于python - 为什么从数据框中检索单行作为字典而不是系列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59476209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com