繁華開(kāi)滿天機(jī)
2022-09-20 15:27:38
我收到了一個(gè).csv文件,有2列(簡(jiǎn)化)。一列包含數(shù)據(jù),另一列包含文件名。不幸的是,此文件名可能不正確,我必須通過(guò)比較日期和文件名來(lái)確定。我想要什么# initial situationd = { 'call_date': ["20200102-09", "20191203-04", "20200103-10"], 'filename': ["20200102-09xx.wav", "20200102-10yy.wav", "20200103-10zz.wav"]}df = pd.DataFrame(data=d)print(df)# call_date filename# 0 20200102-09 20200102-09xx.wav# 1 20191203-04 20200102-10yy.wav# 2 20200103-10 20200103-10zz.wav...# desired resultprint(pd.Series([True, False, True]))# 0 True# 1 False# 2 True# dtype: bool有了想要的結(jié)果,我可以計(jì)算出我有多少個(gè)錯(cuò)誤的文件,并過(guò)濾DataFrame以?xún)H包含有效的條目。我嘗試過(guò)什么通常,比較的工作方式如下:# True / Falsedf["call_date"] == df["filename"]# filter DFdf[df["call_date"] == df["filename"]]熊貓有一只熊貓。系列.str.startswith函數(shù),但是它僅適用于單個(gè)字符串,而不適用于諸如以下的內(nèi)容:df["filename"].str.startswith(df["call_date"])# 0 NaN# 1 NaN# 2 NaN# Name: filename, dtype: float64問(wèn)題如何進(jìn)行行間比較,比較列“文件名”中的元素是否以列“call_date”中找到的字符串開(kāi)頭?
2 回答

慕碼人8056858
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
將列表理解與 - 輸出為列表,可用于通過(guò)布爾索引進(jìn)行篩選startswith
m = [x.startswith(y) for x, y in df[['filename','call_date']].values]
藝術(shù)
m = [x.startswith(y) for x, y in zip(df['filename'], df['call_date'])]
print (m)
[True, False, True]
另一種解決方案,但速度較慢:
m = df.apply(lambda x: x['filename'].startswith(x['call_date']), axis=1)
print (m)
0 True
1 False
2 True
dtype: bool

FFIVE
TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
執(zhí)行:
df['is_correct'] = df.apply(lambda x: x['filename'].startswith(x['call_date']),axis=1)
然后,總結(jié)一下你有多少正確:
df['is_correct'].sum()
添加回答
舉報(bào)
0/150
提交
取消