【发布时间】:2015-09-03 09:30:10
【问题描述】:
我正在为那些在一列中包含关键字的记录过滤列表。总体列表,输出如下:
outputs =
sent_name Name Lat Lng type
Abbey Road Station, London, UK Abbey Road, London E15, UK 51.53193 0.00376 [u'transit_station', u'point_of_interest', u'establishment']
Abbey Wood Station, London, UK Abbey Wood, London SE2, UK 51.49106 0.12142 [u'transit_station', u'point_of_interest', u'establishment']
我在 output[3] 中搜索字符串“station”,然后将结果为 true 的结果附加到一个空列表 results。根据 -
results = []
for output in outputs:
if "station" in output[3]:
results.append(output)
我希望使用 Pandas 进行未来分析,但不知道如何在过滤这些结果后重新创建 DataFrame。
OD = pd.read_csv('./results.csv', header=0)
在哪里,results.csv 又是:
sent_name Name Lat Lng type
Abbey Road Station, London, UK Abbey Road, London E15, UK 51.53193 0.00376 [u'transit_station', u'point_of_interest', u'establishment']
Abbey Wood Station, London, UK Abbey Wood, London SE2, UK 51.49106 0.12142 [u'transit_station', u'point_of_interest', u'establishment']
使用 iterrows,我可以遍历 pandas 数据框中的行并过滤掉类型列中存在“站”的行。
for index, row in OD.iterrows():
if "station" in row['type']:
但是,我无法从中创建新的 DataFrame。我的最终目标是使用 Pandas 中的 .to_csv 函数创建一个新的 csv(仅包含在类型列中包含“站”的记录)。
我尝试创建一个具有适当索引名称的新数据框。然后像上面一样过滤并尝试将这些结果附加到新的数据帧中
OD_filtered = pd.DataFrame(index=['sent_name','Name','Lat', 'Lng', 'type'])
for index, row in OD.iterrows():
if "station" in row['type']:
OD_filtered.append([row['sent_name'], row['Name'], row['Lat'], row['Lng'], row['type']])
pprint(OD_filtered)
但是,这无法写入数据帧并且它仍然是空的。当我打印时(OD_filtered)它给出:
Empty DataFrame
Columns: []
Index: [sent_name, Name, Lat, Lng, type]
【问题讨论】:
-
你的
read_csv代码不应该工作,因为你的 csv 有多个逗号,但除此之外你应该能够做到new_df = OD[OD.apply(lambda x: 'station' in x['type'], axis=1)]我认为 -
非常优雅。我错过了 OD.apply 方法。请把它作为答案,我可以将其标记为正确