[英]Apply a Parsing Function to Pandas DataFrame
我有以下 DF:
pd.DataFrame({'Data': ['Nov, 2018', '20 Sep 2019\xa0android-3','12 Nov 2019android-3', '11 Jun 2019roku-3\xa011 Sep 2019',
'11 Jun 2019roku-3\xa011 Sep 2019', '06 Jan 2020\xa0android-3', '19 Dec 2019\xa0android-3',
'12 Nov 2019\xa0apple-4', '22 Nov 2019\xa0apple-4', '11 Jul 2019\xa0x1-2']})
我正在嘗試創建第二列,該列僅包含每行中的平台而沒有日期。 為此,我有一個名為extract_date()
的函數:
def extract_date(date):
val = re.findall('\d{2} \w{3} \d{4}', date)
if len(val) == 1:
return val[0]
else:
return val
當我在單個字符串上運行這個函數時,我能夠得到我想要的結果:
s = '27 Feb 2020 roku-5.002 Mar 2020 roku-5.0.1'
mydict = dict.fromkeys(extract_date(s), '')
for k, v in mydict.items():
s = s.replace(k, v).strip()
'roku-5.0 roku-5.0.1'
但是,當我嘗試將其應用於 Data 列時,我沒有得到相同的結果:
def strip_dates(x):
if type(x) == float:
return x
else:
mydict = dict.fromkeys(extract_date(x), '')
for k, v in mydict.items():
return x.replace(k, v).strip()
df['Data Text'] = df.apply(lambda row: strip_dates(row['Data']), axis=1)
Data Data Text
0 Nov, 2018 None
1 20 Sep 2019 android-3 0 Sep 019 android-3
2 12 Nov 2019android-3 2 Nov 209android-3
3 11 Jun 2019roku-3 11 Sep 2019 roku-3 11 Sep 2019
4 11 Jun 2019roku-3 11 Sep 2019 roku-3 11 Sep 2019
誰能告訴我我應用該功能的方法有什么問題? 謝謝。
在您的功能中:
def strip_dates(x):
if type(x) == float:
return x
else:
mydict = dict.fromkeys(extract_date(x), '')
for k, v in mydict.items():
return x.replace(k, v).strip()
您立即在mydict
字典的第一個循環中返回:
return x.replace(k, v).strip()
將其更改為:
def strip_dates(x):
if type(x) == float:
return x
else:
mydict = dict.fromkeys(extract_date(x), '')
s = str(x)
for k, v in mydict.items():
s = s.replace(k, v).strip()
return s
如您所見,我重用了您更改的函數中的行,因此s = str(x)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.