ฉันมี Pandas Dataframe ตามที่แสดงด้านล่าง:
1 2 3
0 a NaN read
1 b l unread
2 c NaN read
ฉันต้องการลบค่า NaN ด้วยสตริงว่างเพื่อให้ดูเหมือน:
1 2 3
0 a "" read
1 b l unread
2 c "" read
ฉันมี Pandas Dataframe ตามที่แสดงด้านล่าง:
1 2 3
0 a NaN read
1 b l unread
2 c NaN read
ฉันต้องการลบค่า NaN ด้วยสตริงว่างเพื่อให้ดูเหมือน:
1 2 3
0 a "" read
1 b l unread
2 c "" read
คำตอบ:
import numpy as np
df1 = df.replace(np.nan, '', regex=True)
สิ่งนี้อาจช่วยได้ มันจะแทนที่ NaNs ทั้งหมดด้วยสตริงว่าง
import numpy as np@CaffeineConnoisseur:
pd.np.nanถ้าคุณไม่ต้องการimport numpyเช่นกัน
pd.DataFrame.from_dict(eval(_string_))
... inplace=Trueตัวเลือก
df = df.fillna('')
หรือเพียงแค่
df.fillna('', inplace=True)
นี้จะเติม na (เช่นน่าน) ''กับ
หากคุณต้องการเติมคอลัมน์เดียวคุณสามารถใช้:
df.column1 = df.column1.fillna('')
หนึ่งสามารถใช้แทนdf['column1']df.column1
df[['column1','column2']] = df[['column1','column2']].fillna('')
หากคุณกำลังอ่านชื่อไฟล์จากไฟล์ (พูด CSV หรือ Excel) ให้ใช้:
df.read_csv(path , na_filter=False)df.read_excel(path , na_filter=False)การทำเช่นนี้จะถือว่าฟิลด์ว่างเป็นสตริงว่างโดยอัตโนมัติ ''
หากคุณมีชื่อไฟล์อยู่แล้ว
df = df.replace(np.nan, '', regex=True)df = df.fillna('')xl.parse('sheet_name', na_filter=False)
ใช้การจัดรูปแบบถ้าคุณเพียงต้องการจัดรูปแบบเพื่อที่จะแสดงผลเป็นอย่างดีเมื่อพิมพ์ เพียงใช้ปุ่มdf.to_string(... formattersเพื่อกำหนดรูปแบบสตริงแบบกำหนดเองโดยไม่ต้องแก้ไข DataFrame หรือหน่วยความจำที่สูญเปล่าโดยไม่จำเป็น:
df = pd.DataFrame({
'A': ['a', 'b', 'c'],
'B': [np.nan, 1, np.nan],
'C': ['read', 'unread', 'read']})
print df.to_string(
formatters={'B': lambda x: '' if pd.isnull(x) else '{:.0f}'.format(x)})
ที่จะได้รับ:
A B C
0 a read
1 b 1 unread
2 c read
print df.fillna('')ด้วยตัวเอง (โดยไม่ทำdf = df.fillna('')) ไม่ได้แก้ไขต้นฉบับเช่นกัน มีความเร็วหรือข้อดีอื่น ๆ ในการใช้to_stringหรือไม่?
df.fillna('')มันเป็น!
ลองนี้
เพิ่ม inplace=True
import numpy as np
df.replace(np.NaN, ' ', inplace=True)
การใช้keep_default_na=False ควรช่วยคุณ:
df = pd.read_csv(filename, keep_default_na=False)
หากคุณมีการแปลง DataFrame เพื่อ JSON, NaNจะให้ข้อผิดพลาดเพื่อแก้ปัญหาที่ดีที่สุดคือการใช้ในกรณีนี้คือการแทนที่ด้วยNaN
นี่คือวิธี: None
df1 = df.where((pd.notnull(df)), None)
ฉันลองกับหนึ่งคอลัมน์ของค่าสตริงกับน่าน
หากต้องการลบนาโนและเติมสตริงว่าง:
df.columnname.replace(np.nan,'',regex = True)
หากต้องการลบนาโนและเติมค่าบางค่า:
df.columnname.replace(np.nan,'value',regex = True)
ฉันลอง df.iloc ด้วย แต่มันต้องการดัชนีของคอลัมน์ ดังนั้นคุณต้องมองเข้าไปในตารางอีกครั้ง เพียงวิธีข้างต้นลดขั้นตอนเดียว
np.nanมาจากไหน ฉันใช้มันไม่ได้หรอก