2017-09-23 15 views
1

私はこのようなcsvファイルを持っています(例:2 =月曜日、3 =火曜日など、曜日を参照するため集計できません)列内の数値を別々の列の数字に分割する

enter image description here

私は別の列に各桁を持つように "訪問数"列を分割します。このような何か:

enter image description here

は、どのように私のpythonでこれを行うことができますか?私は数字の桁数と同じ数の列を持ちたい。私は1000行を持っています

私はこのコードを使い始めましたが、うまくいきませんでした。

import pandas as pd 
file=pd.read_csv('file.csv') 

data = [] 
with open('file.csv', 'r') as fh: 
for line in fh: 
data.append(line.split()) 

data = dict(zip(*data)) 
d = { v for in [int(c)]) 
data['visits'][1:])]} 
d['ID'] = data['ID'] 
d['visits'] = data['visits'][0] 
data = pd.DataFrame(d) 
+0

まずは、桁数は常に同じであることを確認してください。そうでない場合は、他の操作(たとえば、その列に関数を適用するなど)が必要な場合があります。 – pazqo

+0

@pazqoそれを見て、私はいいえと言います。それは大きなファイル(1000行)です。だから私はPythonを使いたいのです。 – Supern92

+0

数字や_numbers_を分割したいですか?数字を分割することは意味がないようです。また、いくつかのデータをテキストに貼り付けてください。人気の信念に反して、絵は助けにならない。 –

答えて

3

使用str.split

df 

    ID  visits 
0 1 12 1 40 50 
1 2 56 2 567 34 
2 3 4 5 345 78 

visits = df['visits'].str.split(expand=True).add_prefix('visit_')  
visits 

    visit_0 visit_1 visit_2 visit_3 
0  12  1  40  50 
1  56  2  567  34 
2  4  5  345  78 

次に、IDvisitsを連結:

df = pd.concat([df[['ID']], visits], 1)  
df 

    ID visit_0 visit_1 visit_2 visit_3 
0 1  12  1  40  50 
1 2  56  2  567  34 
2 3  4  5  345  78 

あなたが個別に各番号の各桁をしたい場合は、あなたが希望チェーンdf.applyコールを。さらに80に置き換える場合は、df.replaceを使用してください。

visits = df['visits'].str.replace('\s+', '')\ 
      .apply(lambda x: pd.Series(list(x))).add_prefix('visit_')\ 
      .replace('[89]', 0, regex=True) 
visits 

    ID visit_0 visit_1 visit_2 visit_3 visit_4 visit_5 visit_6 visit_7 
0 1  1  2  1  4  0  5  0  NaN 
1 2  5  6  2  5  6  7  3  4 
2 3  4  5  3  4  5  7  0  NaN 

各列がストリングの列(objectタイプ)であることに注意してください。しかし、それらを整数として使用したい場合は、NaNを取り除きたいでしょう。 NaNの列を削除しても問題がなければ、このソリューションは少し簡素化します。

visits = df.visits.str.replace('\s+', '')\ 
      .apply(lambda x: pd.Series(list(x)))\ 
      .dropna(axis=1).add_prefix('visit_').astype(int) % 8 
visits 

    visit_0 visit_1 visit_2 visit_3 visit_4 visit_5 visit_6 
0  1  2  1  4  0  5  0 
1  5  6  2  5  6  7  3 
2  4  5  3  4  5  7  0 

あなたはまだpd.concatを使用してdf.IDvisitsを連結する必要があります。

関連する問題