ฉันต้องการค้นหาค่าทั้งหมดใน 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 ... (บางทีนี่อาจจะถูกร้องขอเป็นคุณสมบัติ)