2017-02-16 2 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') 

는 그러나, 나는 열 이름 대신 열 인덱스를 사용하고자합니다 (dataframe 나에게 전달, 나는 열 이름이 고유 보장 할 수 없습니다) :이처럼 그것을 할 수 있습니다. 이 잘 작동

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

하지만 길이 하나의 dataframe 실패 : 나는 이런 식으로 작업을 수행 할 수 있습니다 열 이름으로 할당이 여전히 작동

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 인 데이터 프레임에 대해 실패하는지, 그리고 내가 무엇을 할 수 있는지 이해하고 싶습니다. 일하지 마라. 파이썬 3.5와 함께 팬더 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

예, 중복 열은 문제가 있습니다. 그러나 팬더의 마지막 버전 인'read_csv'를 사용하면 중복 열을 해결할 수 있습니다. 1' ... – jezrael

관련 문제