考虑以下代码:
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
行。
答案 0 :(得分:0)
如果我正确理解了您的问题,则当您使用索引来指示是否有行has_polyline
时,您的问题就会开始。
当您按索引查找时,大熊猫会假设您正在查找特定的行,因此它将以一系列形式单独返回该行。查找特定列现在将为您提供该单元格中的对象。
如果多个行具有相同的索引,则熊猫别无选择,只能将它们全部返回,因此现在查找一列将为您提供一系列。
您可以使用以下语法来避免这种现象:
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'])
在这里,您是在告诉熊猫“获取has_polyline
为True的所有行,然后将得到的df的'map'
列给我。