ฉันต้องการค้นหาค่าทั้งหมดใน Pandas dataframe ที่มีช่องว่าง (จำนวนเท่าใดก็ได้) และแทนที่ค่าเหล่านั้นด้วย NaNs
ความคิดใด ๆ ที่สามารถปรับปรุงได้?
โดยทั่วไปฉันต้องการที่จะเปิดนี้:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
เป็นนี้
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
ฉันจัดการเพื่อทำมันด้วยรหัสด้านล่าง แต่ผู้ชายมันน่าเกลียด ไม่ใช่ Pythonic และฉันแน่ใจว่าไม่ใช่การใช้แพนด้าอย่างมีประสิทธิภาพที่สุด ฉันวนรอบแต่ละคอลัมน์และทำการแทนที่บูลีนกับมาสก์คอลัมน์ที่สร้างขึ้นโดยใช้ฟังก์ชันที่ทำการค้นหา regex ของแต่ละค่าโดยจับคู่บนช่องว่าง
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
มันสามารถปรับให้เหมาะสมเพียงเล็กน้อยโดยวนซ้ำผ่านเขตข้อมูลที่อาจมีสตริงว่าง:
if df[i].dtype == np.dtype('object')
แต่นั่นไม่ใช่การปรับปรุงมากนัก
และสุดท้ายรหัสนี้ตั้งค่าสตริงเป้าหมายเป็น None ซึ่งทำงานกับฟังก์ชันของ Pandas เช่นfillna()
แต่มันจะดีสำหรับความสมบูรณ์ถ้าฉันสามารถแทรกNaN
โดยตรงแทนNone
ได้
replace
กับ regex ... (บางทีนี่อาจจะถูกร้องขอเป็นคุณสมบัติ)