bar*_*icz 5 python dataframe 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)
df = df.set_index(has_polyline)
df = df.loc[True]
print(df['map'])
Run Code Online (Sandbox Code Playgroud)
打印出来的是一本字典:
{'id': 5743, 'summary_polyline': 343434}
Run Code Online (Sandbox Code Playgroud)
但是,如果有多于两行包含折线:
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'])
Run Code Online (Sandbox Code Playgroud)
一个Series
对象将被打印:
map
True {'id': 5743, 'summary_polyline': 343434}
True {'id': 95, 'summary_polyline': 111}
Name: map, dtype: object
Run Code Online (Sandbox Code Playgroud)
为什么会这样,即使只有一行,我怎么能总是得到?我需要一致的输出,因为我事先不知道会有多少行。Series
True
True
如果我正确理解你的问题,当你使用索引来指示是否为 row 时,你的问题就开始了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'])
Run Code Online (Sandbox Code Playgroud)
在这里,你告诉 pandas“获取所有为 True 的行has_polyline
,然后给我'map'
你得到的 df 的列。
归档时间: |
|
查看次数: |
113 次 |
最近记录: |