Python Pandas : 행별로 데이터 프레임 채우기
pandas.DataFrame개체에 행을 추가하는 간단한 작업은 수행하기 어려운 것 같습니다. 이와 관련된 3 개의 stackoverflow 질문이 있으며, 그중 어느 것도 작동하는 답변을 제공하지 않습니다.
여기 내가하려는 일이 있습니다. 행과 열의 이름과 모양을 이미 알고있는 DataFrame이 있습니다.
>>> df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])
>>> df
a b c d
x NaN NaN NaN NaN
y NaN NaN NaN NaN
z NaN NaN NaN NaN
이제 행 값을 반복적으로 계산하는 함수가 있습니다. 행 중 하나를 사전 또는으로 어떻게 채울 수 pandas.Series있습니까? 실패한 다양한 시도는 다음과 같습니다.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df['y'] = y
AssertionError: Length of values does not match length of index
분명히 행 대신 열을 추가하려고했습니다.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.join(y)
AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'
매우 유익하지 않은 오류 메시지입니다.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.set_value(index='y', value=y)
TypeError: set_value() takes exactly 4 arguments (3 given)
분명히 그것은 데이터 프레임에서 개별 값을 설정하기위한 것입니다.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.append(y)
Exception: Can only append a Series if ignore_index=True
글쎄, 나는 색인을 무시하고 싶지 않다. 그렇지 않으면 여기에 결과가있다.
>>> df.append(y, ignore_index=True)
a b c d
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 1 5 2 3
열 이름을 값과 정렬했지만 행 레이블이 손실되었습니다.
>>> y = {'a':1, 'b':5, 'c':2, 'd':3}
>>> df.ix['y'] = y
>>> df
a b \
x NaN NaN
y {'a': 1, 'c': 2, 'b': 5, 'd': 3} {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z NaN NaN
c d
x NaN NaN
y {'a': 1, 'c': 2, 'b': 5, 'd': 3} {'a': 1, 'c': 2, 'b': 5, 'd': 3}
z NaN NaN
그것은 또한 비참하게 실패했습니다.
그래서 어떻게하나요?
df['y'] 열을 설정합니다
행을 설정하고 싶기 때문에 .loc
.ix여기에서 동일 하다는 점 에 유의 하십시오. 행의 각 요소에 사전을 할당하려고 시도했기 때문에 실패했습니다 y. Series로 변환하면 pandas에게 입력을 정렬하고 싶다고 알립니다 (예를 들어 모든 요소를 지정할 필요가 없음).
In [7]: df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])
In [8]: df.loc['y'] = pandas.Series({'a':1, 'b':5, 'c':2, 'd':3})
In [9]: df
Out[9]:
a b c d
x NaN NaN NaN NaN
y 1 5 2 3
z NaN NaN NaN NaN
내 접근 방식은 이었지만 이것이 가장 빠른 솔루션이라고 보장 할 수 없습니다.
df = pd.DataFrame(columns=["firstname", "lastname"])
df = df.append({
"firstname": "John",
"lastname": "Johny"
}, ignore_index=True)
이것은 더 간단한 버전입니다
df = DataFrame(columns=('col1', 'col2', 'col3'))
for i in range(5):
df.loc[i] = ['<some value for first>','<some value for second>','<some value for third>']`
입력 행이 사전이 아닌 목록 인 경우 다음은 간단한 솔루션입니다.
import pandas as pd
list_of_lists = []
list_of_lists.append([1,2,3])
list_of_lists.append([4,5,6])
pd.DataFrame(list_of_lists, columns=['A', 'B', 'C'])
# A B C
# 0 1 2 3
# 1 4 5 6
참고 URL : https://stackoverflow.com/questions/17091769/python-pandas-fill-a-dataframe-row-by-row
'Programing' 카테고리의 다른 글
| SQL Server에서 INNER JOIN을 사용하여 여러 테이블에서 삭제하는 방법 (0) | 2020.08.10 |
|---|---|
| 디자인 패턴과 건축 패턴의 차이점은 무엇입니까? (0) | 2020.08.10 |
| 모의 객체 초기화-MockIto (0) | 2020.08.10 |
| rand () % 6이 편향된 이유는 무엇입니까? (0) | 2020.08.10 |
| 다른 개발자를위한 프레임 워크 또는 라이브러리를 안전하게 구축하는 방법은 무엇입니까? (0) | 2020.08.10 |