回答編集履歴

1

edit

2018/01/02 16:53

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -1 +1,85 @@
1
+ 焦っている気持ちはわかりますが、
2
+
3
+ CSVファイルをコピーしやすい状態にする、データのバリエーションについて、などより多くの情報を先に提示することによって、解決に近づくことが楽になります。
4
+
5
+
6
+
7
+ アカウント名について、半角から始まることを仮定しました。
8
+
9
+
10
+
11
+ ```python
12
+
13
+ import pandas as pd
14
+
15
+ import numpy as np
16
+
17
+ import re
18
+
19
+
20
+
21
+ from io import StringIO
22
+
23
+ # CSVファイルがないので、見えているものを手で入れました。
24
+
25
+ a = StringIO('''A,B,C,D,E,F,G,H,I
26
+
27
+ 0,2011/3/11,19:57:54,eiden33,ちょっとイソジンかって放射能対策してくる。,,None,None,None,None
28
+
29
+ 1,2011/3/11,20:02:34,BELx2TOKYOJAPAN,外部電源が無いですが電源車で復旧だそうです。放射能漏れは無いとのことだけど柏崎原発の時も隠蔽してたので、納豆,コンブ,イソジン(ヨウ素剤)を用意していおきましょう!ヨウ素の摂取量です。甲状腺に異常のある人はヨウ素取りすぎないようにhttp://www.nuketext.or...,,None,None,None,None
30
+
31
+ 3501,2011/4/1,11:48:22,shiori_ayase,今日は、イソジン買って帰る。・・・いや、放射線対策じゃなくてね、のどが痛いんだよ、うがい薬が欲しいんだよ!!,,None,None,None,None
32
+
33
+ 3502,2011/4/2,12:05:15,,enjoy_cacao,logic_text,,陰毛がチリチリして来た気がするのも、やはり放射能の影響でしょうか。イソジントリートメントでケアしなくては…。,,None''')
34
+
35
+
36
+
37
+ # read CSV file
38
+
39
+ df = pd.read_csv(a)
40
+
41
+ # possible account parts
42
+
43
+ cols = df.columns[2:]
44
+
45
+ # fill NaNs
46
+
47
+ df = df.fillna('')
48
+
49
+ # get account name with assumption, else fill with ''
50
+
51
+ df.loc[:, cols] = df[cols].apply(lambda ss: [next(iter(re.findall('^[a-zA-Z0-9_]{2,15}', str(s))), '') or '' for s in ss], axis=1)
52
+
53
+ # replace 'None' with ''
54
+
55
+ df = df.replace(to_replace='None', value='')
56
+
57
+ # replace '' for NaN to drop
58
+
59
+ df = df.replace(to_replace='', value=np.nan)
60
+
61
+ # record column names
62
+
63
+ cols = df.columns
64
+
65
+ # drop NaNs and shift to left
66
+
67
+ df = df.apply(lambda x: pd.Series(x.dropna().values), axis=1).fillna('')
68
+
69
+ # use recored column names
70
+
71
+ df.columns = cols[:len(df.columns)]
72
+
73
+ # answer is in df
74
+
75
+ print(df)
76
+
77
+ ```
78
+
79
+
80
+
81
+ ---
82
+
83
+
84
+
1
85
  見えている限り`dema_df[['A','B','C']]`で目的は果たされませんか?