2016-08-10 5 views
0

内の項目の番号に基づいて記入する列の選択:W、X、Y、Zのは、だから私は、データフレームで4列持つ行

を私はいくつか持つ4つの項目といくつかの行を持つCSVファイルを持っています、 3つのアイテム、および1つの行につき2つのアイテム。

私が使用しています:

frame = pd.read_csv("file_example.csv", names = [ 'W', 'X', 'Y', 'Z']) 

をW XとZの3塗りつぶしを持つ行がYをスキップして、NANを残すようにそれを作るための方法はありますか?同様に、2つの項目を含む行がWとZを記入し、XとYを飛ばすようにします。今のように、最初の列が塗りつぶされます。

つまり、行の項目数に基づいて行がいっぱいになる列を選択して選択する方法はありますか?

ありがとうございました。

編集: 入力(出力に相当):以下の方法を試し

2,seafood,21418 

2,stews,24126 

2,seafood,23287 

2,sandwiches,17429 

4,6237 

4,30815 

4,5321 

4,49248 

、I 100本の試験線を4,3,2項目行のそれぞれを置きます。出力の サンプル部位:

3項目ライン:

2  seafood  21418.0 21418 

2  stews  24126.0 24126 

2  seafood  23287.0 23287 

2 sandwiches  17429.0 17429 

2アイテムライン:

4  6237   NaN 6237 

4  30815   NaN 30815 

4  5321   NaN 5321 

4  49248   NaN 49248 

Zが正しく充填されているが、NaNのオーバーマスキングされていません。

編集2:新しいデータフレームを変数に割り当てなかった。ソリューションが機能する。

+0

CSV構造が明確であるため、read_csvで行うことはできませんが、後処理では可能です。 CSVファイルのサンプルを投稿できますか? – ayhan

+0

例、(列はID、名前、日付、番号)であり、csvファイルの一部の行は '10、青色、20160809,203 12、赤色、20160810,4578 9、赤、3094 15、イエロー、グラグラの書式設定のため申し訳ありませんが109 1,86 5,9384 56,3490' は、私は新しいんだけど、一部の行は4,3、および2つのパラメータを持っていますが、それらうデータフレーム内の特定の列に対応し、他の列は空白です。 –

答えて

0
import numpy as np 
import pandas as pd 
df = pd.read_csv('test.csv', names=['W', 'X', 'Y', 'Z']) 
df 
 
Out: 
    W  X   Y  Z 
0 10 Blue 20160809.0 203.0 
1 12  Red 20160810.0 4578.0 
2 9  Red  3094.0  NaN 
3 15 Yellow  109.0  NaN 
4 1  86   NaN  NaN 
5 5 9384   NaN  NaN 
6 56 3490   NaN  NaN 

レコードのNaNの位置:

nans = df.isnull().values 

塗りつぶしZカラム:

df['Z'] = df['Z'].fillna(df['Y'].fillna(df['X'])) 

シフトのNaN左:

df.mask(np.roll(nans, -1), np.nan) 
 
Out: 
    W  X   Y  Z 
0 10 Blue 20160809.0 203 
1 12  Red 20160810.0 4578 
2 9  Red   NaN 3094 
3 15 Yellow   NaN 109 
4 1  NaN   NaN 86 
5 5  NaN   NaN 9384 
6 56  NaN   NaN 3490 
+0

もう1つ、私のマシンでそれをやってみましたが、私はZの列を埋めていましたが、XとYのNaNを埋めてもうまくいかないようですが、これは2つのアイテムの行のためにこうなります: 395 4 35379のNaN 35379 396 4 1064のNaN 1064 397 4 46717のNaN 46717 398 4 4119のNaN 4119 399 4 26060のNaN 3つの項目行の26060 そしてこれ: 156 2つのサンドイッチ30517.0 30517の 157 2サンドイッチ39551.0 39551 158 2穀物48378.0 48378 したがって、NaNは埋め込まれますが、NaNは出力されません。助けてくれてありがとう。 –

+0

質問を編集してその出力を含めることはできますか?対応するCSV回線も転記してください。それはコメントでそれらを読むことは非常に難しいです。 – ayhan

+0

ああ、申し訳ありません。代わりにそれを編集しました。 –

関連する問題