2016-04-04 30 views
0

Ben doldurma değeri nan yerine boş bir dize istiyorum nerede birleştirmek istediğiniz birden fazla DataFrames var. Bazı DataFrames'lerde zaten nan değerleri var. Ben ne isterim ama boş değerleri nan ile doldurun. tek nan ile doldurun, ya böyle bir şey elde etmek fill_value belirtmez Nasıl:Boş dize ile doldururken hizalanmamış DataFrames birleştirme

>>> df1 
    Value1 
0  1 
1  NaN 
2  3 

>>> df2 
    Value2 
1  5 
2  Nan 
3  7 

>>> merge_multiple_without_nan([df1,df2]) 
    Value1 Value2 
0  1  
1  NaN  5 
2  3  NaN 
3    7 

Bu concat yaptığı şudur:

>>> concat([df1,df2], axis=1) 
    Value1 Value2 
0  1  NaN 
1  NaN  5 
2  3  NaN 
3  NaN  7 

cevap

0

Eh, concat içinde herhangi bir işlev bulmak ya da kendisi tarafından bu bakacaklarını birleştirme, ancak aşağıdaki kod fazla hassel olmadan çalışır olamazdı :

df1 = pd.DataFrame({'Value2': [1,np.nan,3]}, index = [0,1, 2]) 
df2 = pd.DataFrame({'Value2': [5,np.nan,7]}, index = [1, 2, 3]) 
# Add temporary Nan values for the data frames. 
df = pd.concat([df1.fillna('X'), df2.fillna('Y')], axis=1) 
df= 
    Value2 Value2 
0  1 NaN 
1  X  5 
2  3  Y 
3 NaN  7 

Adım 2:

df.fillna('', inplace=True) 
df= 
    Value2 Value2 
0  1 
1  X  5 
2  3  Y 
3    7 

Aşama 3:

df.replace(to_replace=['X','Y'], value=np.nan, inplace=True) 
df= 
    Value2 Value2 
0  1 
1 NaN  5 
2  3 NaN 
3    7 
0

concat kullandıktan sonra, DataFrames adımlayabilirsiniz sen birleştirildi, eksik dizinleri bulun ve boş bir dizeyle doldurun. Bu, sütun adlarınız benzersiz olduğu sürece, isteğe bağlı sayıda DataFrames'i birleştirmek için çalışmalıdır.

# Concatenate all of the DataFrames. 
merge_dfs = [df1, df2] 
full_df = pd.concat(merge_dfs, axis=1) 

# Find missing indices for each merged frame, fill with an empty string. 
for partial_df in merge_dfs: 
    missing_idx = full_df.index.difference(partial_df.index) 
    full_df.loc[missing_idx, partial_df.columns] = '' 

sizin örnek verileri kullanarak elde edilen çıktının:

Value1 Value2 
0  1  
1 NaN  5 
2  3 NaN 
3    7