2017-02-16 1 views
1

日付列を書式設定された文字列に置き換える必要があります。既存の列に新しい列を列インデックスで割り当てる

df = pd.DataFrame(pd.date_range('2016-01-01', '2016-01-02'), columns=['date']) 
df['date'] = df['date'].dt.strftime('%Y-%m-%d') 

しかし、私は列インデックスの代わりに、列名を(データフレームは、私に渡され、私は列名が一意であることを保証することはできません)を使用したい:私はこのようにそれを行うことができます。

df.iloc[:, 0] = df.iloc[:, 0].dt.strftime('%Y-%m-%d') 

これは正常に動作しますが、それは長さ1のデータフレームのために失敗します:

df = pd.DataFrame([pd.to_datetime('2016-01-01')], columns=['date']) 
df.iloc[:, 0] = df.iloc[:, 0].dt.strftime('%Y-%m-%d') 

pandas/core/internals.py in _try_coerce_args(self, values, other)

-> 2265 other = other.astype('i8', copy=False).view('i8')

ValueError: invalid literal for int() with base 10: '2016-01-01'

列名によって割り当てはまだ動作することに注意してください:

私はこのようにそれを行うことができます
df['date'] = df.iloc[:, 0].dt.strftime('%Y-%m-%d') 

長さ1のデータフレームで列インデックスによる割り当てが失敗する理由を理解したいと思います。仕事。私はpython 3.5とpandas 0.19.1を使用しています。

答えて

1

それは少しハックですが、作品 - []に位置することによって、列を選択します。

df = pd.DataFrame([pd.to_datetime('2016-01-01')], columns=['date']) 

print (df.columns[0]) 
date 

df[df.columns[0]] = df.iloc[:, 0].dt.strftime('%Y-%m-%d') 
print (df) 
     date 
0 2016-01-01 
+0

待ち、それはケースのカラム名に私の問題を解決しない固有のものではありません:( – IanS

+0

たぶん私はちょうどべき – IanS

+1

はい、重複した列は問題ですが、最後のバージョンのpandasを使用している場合は、 'read_csv'で重複した列を解決します - 'を追加してください。 1' ... – jezrael

関連する問題