1
これはデータフレーム以下です。実際のデータは膨大でNaNがたくさんあります。セルから有効な値を取得し、Pythonでpandasを使用して列を更新する
Date ID Code Value Value1 Value2 Value3
0 1945-12-30 H0010603 ZZZ008-2 zzz=ID AAC=10 NaN NaN
1 1945-12-30 H0010603 ZZZ008-2 zzz=ID AAC=01 NaN NaN
2 1945-12-30 H0010603 ZZZ008-2 NaN NaN VEC=1 NaN
3 1945-12-30 H0010603 ZZZ008-2 NaN NaN VEC=2 AAC= 1 A
4 1945-12-30 H0010603 ZZZ008-2 NaN NaN VEC=3 AAC= 1 A
これは最終的に予想されるデータです。
Date ID Code zzz AAC VEC AAC.1
0 1945-12-30 H0010603 ZZZ008-2 ID 10 NaN NaN
1 1945-12-30 H0010603 ZZZ008-2 ID 01 NaN NaN
2 1945-12-30 H0010603 ZZZ008-2 NaN NaN 1 NaN
3 1945-12-30 H0010603 ZZZ008-2 NaN NaN 2 1 A
4 1945-12-30 H0010603 ZZZ008-2 NaN NaN 3 1 A
実際に列名をセルの値で更新する必要があります。
df = pd.read_excel(xlPath, 0)
writer = pd.ExcelWriter(xlPath,
engine='xlsxwriter',
date_format='mm/dd/yyy',
datetime_format='mm/dd/yyyy')
df = df.fillna('')
for ColumnName, values in df.iteritems():
for index, value in enumerate(values):
if '=' in str(value):
df.set_value(index, ColumnName, str(value).split('=')[1])
NewColumnName = str(value).split('=')[0]
df.rename(columns={ColumnName: NewColumnName}, inplace=True)
df.to_excel(writer, index=False)
writer.save()
しかし、1つの列が繰り返されているため、これがエラーになります。 だから、私はdfをループして、与えられた列の最初の有効な値を取得してリストに入れることができると思った。
AllColumns = list(df.columns.values)
NewColNameList = []
for ColumnName, values in df.iteritems():
a = 0
for index, value in enumerate(values):
while a < len(values):
if '=' in str(value):
if value != '':
print(index, values)
NewColNameList.append(value)
break
a += 1
print(NewColNameList)
しかし、私は私が思ったようにWhileループでは強くありません。必要なdfを得るための助けに感謝します。
これは、問題の半分のみを解決します。私はまた、残りのセルから削除する必要があるテキストから列名を追加する必要があります..それを行う方法はありますか? – Naveen
@Naveen、更新された投稿を確認してください – MaxU