Python panda: 데이터 프레임 행을 한 행씩 채우기
파일에 행을 추가하는 간단한 작업pandas.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
원하는 것이 아닐 수 있습니다. 시리즈로 변환하면 입력을 정렬하고 싶다는 메시지가 표시됩니다(예를 들어 모든 요소를 지정할 필요가 없음).
In [6]: import pandas as pd
In [7]: df = pd.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])
In [8]: df.loc['y'] = pd.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"])
entry = pd.DataFrame.from_dict({
"firstname": ["John"],
"lastname": ["Johny"]
})
df = pd.concat([df, entry], ignore_index=True)
이것은 더 간단한 버전입니다.
import pandas as pd
df = pd.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
코드 뒤의 논리는 매우 간단하고 간단합니다.
사전을 사용하여 한 행으로 df 만들기
그런 다음 NaN만 포함하고 사전 키와 동일한 열을 가진 모양(1, 4)을 만듭니다.
그리고 나서 1과 2를 딕트 df와 연결하고 그 다음에 또 다른 1과 2를 연결합니다.
import pandas as pd
import numpy as np
raw_datav = {'a':1, 'b':5, 'c':2, 'd':3}
datav_df = pd.DataFrame(raw_datav, index=[0])
nan_df = pd.DataFrame([[np.nan]*4], columns=raw_datav.keys())
df = pd.concat([nan_df, datav_df, nan_df], ignore_index=True)
df.index = ["x", "y", "z"]
print(df)
기브즈
a b c d
x NaN NaN NaN NaN
y 1.0 5.0 2.0 3.0
z NaN NaN NaN NaN
[Program finished]
언급URL : https://stackoverflow.com/questions/17091769/python-pandas-fill-a-dataframe-row-by-row
'IT' 카테고리의 다른 글
Hg: git's rebase와 같은 rebase를 하는 방법 (0) | 2023.07.02 |
---|---|
C 표준 보증 버퍼는 Null 터미네이터를 지나치지 않습니까? (0) | 2023.07.02 |
프로젝트에서 엔티티 프레임워크의 최신 버전을 참조하고 있습니다... - 오류 (0) | 2023.07.02 |
Heroku에서 Node.js 앱을 만들 때 Git에 "node_modules" 폴더를 체크인해야 합니까? (0) | 2023.07.02 |
MongoDB의 ObjectIds는 어떻게 생성됩니까? (0) | 2023.06.27 |