2016-12-18 7 views
0

空のセルがnumberで始まっていれば、前の行の値で空のセルを埋める必要があります。パンダ(Python):空のセルを前の行の値で塗りつぶしますか?

data = pd.read_csv('DATA.csv',sep='\t', dtype=object, error_bad_lines=False) 
data = data.fillna(method='ffill', inplace=True) 
print(data) 

が、それはうまくいきませんでした:たとえば、私はしかし、

Text Text  
30  Text Text  
30  Text Text  
30  Text Text  
31  Text Text 
Text Text  
31  Text Text  
31  Text Text  
31  Text Text  
32  Text Text 
Text Text  
     Text Text  
     Text Text  
     Text Text  
     Text Text 

が、私はこのコードを使用してこれを到達しようとした持ちたい

Text Text  
    30  Text Text  
      Text Text  
      Text Text  
    31  Text Text 
    Text Text  
    31  Text Text  
      Text Text  
      Text Text  
    32  Text Text 
    Text Text  
      Text Text  
      Text Text  
      Text Text  
      Text Text 

を持っています。

どうすればよいですか?

+0

"空" のセルの値は何ですか? 'fillna'は値が' NaN'のセルのみを埋めます。 'fillna'を使うには、まず" "を' numpy.nan'に置き換えてください。 – DyZ

+0

ありがとうございます。正規表現で "空の"値をNaNに変更しました。しかし、それは動作しませんでした。 –

答えて

1

まず、NaNを持つあなたの空のセルに置き換えます。

df[df[0]==""] = np.NaN 

を今、使用ffill()

df.fillna(method='ffill') 
#  0 
#0 Text 
#1 30 
#2 30 
#3 30 
#4 31 
#5 Text 
#6 31 
#7 31 
#8 31 
#9 32 
+0

文字列の値に対応していますか?私は空のセルに文字列である前の行の値を入力しようとしているので、まだ 'NaN'を返します。 – joasa

3

私はあなたが最初の代わりにwhitespacesNaNを得ることができると思う:

df.Text = df.Text[df.Text.str.strip() != ''] 

print (df) 
    Text Text.1  
0  30 Text Text 
1 NaN Text Text 
2 NaN Text Text 
3  31 Text Text 
4 Text Text NaN 
5  31 Text Text 
6 NaN Text Text 
7 NaN Text Text 
8  32 Text Text 
9 Text Text NaN 
10 NaN Text Text 
11 NaN Text Text 
12 NaN Text Text 
13 NaN Text Text 

そして、最後NaNを置き換え、NaNを充填NaNを置き換えない場合は、数値前進のためにwhereためto_numericを取得し、(パラメータffillfillnaと同じ)ffillを使用空文字列by fillna

orig = df.Text.copy() 
df.Text = df.Text.ffill() 
mask1 = pd.to_numeric(df.Text, errors='coerce') 
df.Text = df.Text.where(mask1, orig).fillna('') 
print (df) 
    Text Text.1  
0  30 Text Text 
1  30 Text Text 
2  30 Text Text 
3  31 Text Text 
4 Text Text NaN 
5  31 Text Text 
6  31 Text Text 
7  31 Text Text 
8  32 Text Text 
9 Text Text NaN 
10   Text Text 
11   Text Text 
12   Text Text 
13   Text Text 
+0

ありがとうございました。しかし、私はあなたのコードを実行したとき、私はこれを取得: ライン2672を、__getattr__ 戻りオブジェクト.__のgetAttribute __(自己、名) はAttributeErrorに:「DATAFRAME」オブジェクトが属性「テキスト」 を持っていない私は何の.text手段を理解することができませんでした。 (私はテキストを書きましたが、実際には文字列の値があります)。 –

+0

テキストは列名です。代わりに 'df.col1'か' df ['col 1'] 'を使ってみてください。 – jezrael

関連する問題