[英]Python Pandas filtering and creating new dataframe
我正在為那些在一列中包含關鍵字的記錄過濾列表。 總體列表輸出如下:
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']
我在輸出[3]中搜索字符串“ station”,然后將結果為true的結果附加到一個空列表中。 按照 -
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']
使用迭代,我可以遍歷pandas數據框中的行,並過濾掉type列中存在“ station”的行。
for index, row in OD.iterrows():
if "station" in row['type']:
但是,我無法由此創建新的DataFrame。 我的最終目標是使用Pandas中的.to_csv函數創建一個新的csv(僅包含在type列中具有“ station”特征的記錄)。
我試圖用適當的索引名創建一個新的數據框。 然后如上進行過濾,並嘗試將這些結果附加到新的數據框中
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]
你可以通過調用創建一個布爾面膜apply
在“類型”一欄,以建立新的DF:
In [37]:
import io
import pandas as pd
t="""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']"""
df = pd.read_csv(io.StringIO(t), sep=';')
df
Out[37]:
sent_name Name Lat \
0 Abbey Road Station, London, UK Abbey Road, London E15, UK 51.53193
1 Abbey Wood Station, London, UK Abbey Wood, London SE2, UK 51.49106
Lng type
0 0.00376 [u'transit_station', u'point_of_interest', u'e...
1 0.12142 [u'transit_station', u'point_of_interest', u'e...
In [39]:
# filter the df
df[df['type'].apply(lambda x: 'station' in x)]
Out[39]:
sent_name Name Lat \
0 Abbey Road Station, London, UK Abbey Road, London E15, UK 51.53193
1 Abbey Wood Station, London, UK Abbey Wood, London SE2, UK 51.49106
Lng type
0 0.00376 [u'transit_station', u'point_of_interest', u'e...
1 0.12142 [u'transit_station', u'point_of_interest', u'e...
因此,在您的情況下,以下方法應該起作用:
new_df = OD[OD['type'].apply(lambda x: 'station' in x)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.