[英]how to ignore multiple entries with same index while reading data from CSV using pandas
我有一個csv文件,看起來像這樣:
patient_id, age_in_years, CENSUS_REGION, URBAN_RURAL_STATUS, YEAR
11511, 7, Northeast, Urban, 2011
9882613, 73, South, Urban, 2011
32190339, 49, West, Urban, 2011
32190339, 49, West, Urban, 2011
32190339, 49, West, Urban, 2011
32190339, 49, West, Urban, 2011
32190339, 49, West, Urban, 2011
32190339, 49, West, Urban, 2011
...
第一列(即Patient_id)是索引,您可以看到同一患者有多個條目。 當我使用pandas
導入數據時,我希望我的代碼忽略這些多個條目,但是我不確定該怎么做。 目前,我正在使用以下代碼:
df = pd.read_csv(filename, index_col = 0)
df.drop_duplicates()
在代碼的進一步內容中,我有一個函數說:
def URSTATUS_to_numeric(a):
if a == 'Urban':
return 0
if a == 'Rural':
return 1
if a == 'NULL':
return 2
當我調用此函數並使用df.drop_duplicates()
打印它時,這是我得到的:
df['URSTATUS_num'] = df['URBAN_RURAL_STATUS'].apply(URSTATUS_to_numeric)
print(df.drop_duplicates(['URSTATUS_num']))
>>> patient_id URSTATUS_num
11511 0
129126475 1
151269094 NaN
因此,基本上,它URSTATUS_num
列作為參考刪除重復項。 但是,我希望代碼在執行drop_duplicates()
操作時始終引用patient_id
。 誰能幫忙嗎?
我不相信您在閱讀它們時可以忽略它們,但是一旦閱讀它們,就可以使用drop_duplicates
輕松刪除它們。
df = pd.read_csv(filename, index_col = 0)
>>> df.drop_duplicates()
patient_id age_in_years CENSUS_REGION URBAN_RURAL_STATUS YEAR
0 11511 7 Northeast Urban 2011
1 9882613 73 South Urban 2011
2 32190339 49 West Urban 2011
編輯:
您可能只想調用一次,例如
df = pd.read_csv(filename, index_col = 0).drop_duplicates()
根據基礎數據的整潔度,您可能首先需要進行預處理以去除空格等。
您可以通過以下方式將drop_duplcates
“就地”
df.drop_duplicates(inplace=True)
然后,相同的約定也適用於其他數據fill_na
方法,例如sort
, fill_na
等。 我想這是您個人喜好的問題,無論您使用此語法還是更“實用”的語法
df_dedup = df.drop_duplicates()
盡管默認行為( inplace=False
)確實是我通常使用的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.