I have a 다테프라임 '에서' 라 불렀다.
import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df
출력:
c1 c2
0 10 100
1 11 110
2 12 120
이제 이 프레임을 행을 반복할 싶다. I want to be 행일 액세스하려면 모든 요소 (값을 셀입니다) 에 이름을 열 수 있다. 예를 들면 다음과 같습니다.
for row in df.rows:
print row['c1'], row['c2']
그렇게 할 수 있는 것은 판다?
내가 찾은 이 비슷한 질문. 제게 답을 것은 아니지만 데릭쉐퍼드와. 예를 들어, 사용할 수 있을 것이 좋습니다.
for date, row in df.T.iteritems():
또는
for row in df.iterrows():
하지만 난 무엇을, 어떻게 내가 알지 '행' 객체인지 작업을 할 수 있습니다.
[다테프라임.이트로스] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iterrows.html # 프란다s.다타프라임.이트로스) 는 모두 힘을 쏟고 있는 인덱스할 행일 발생기입니다
import pandas as pd
import numpy as np
df = pd.DataFrame([{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}])
< >! - -;;
for index, row in df.iterrows():
print(row['c1'], row['c2'])
Output:
10 100
11 110
12 120
계속 필요한 경우 아래 행뿐만 반복할 방법을 사용할 수 있습니다. 참고 있는 몇 가지 중요한 시 언급되지 않은 다른 모든 분입니다.
인덱스화하여 행에 대해 드프리양로스 (): 인쇄하십시오 행, 행 [" c2";] [" c1";]
행에 대해 드프리양터플스 (# 39, & # 39, 이름 =, = True 인덱스화할 Pandas&): 그레타르 인쇄하십시오 (행, c1" ";), 그레타르 (행, c2" ";)
'아르투플스 이트로스 ()' 보다 ' ()' 가 있어야한다
하지만 주의해야 할 조사 결과에 따르면, 문서 (0.24.2 판다 순간):
[다테프라임.애플리 ()] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html) 을 대신 사용합니다.
new_df = 드프리애플리 (람다 (λ) x: * 2 개)
참조 [판다 docs 에 이터레이션에] (https://pandas.pydata.org/pandas-docs/stable/getting_started/basics.html # 이터레이션에) 자세한 내용은.
안티패턴 백업이었습니다 있는 경우에만 당신이 바라는 이터레이션에 판다, 이 경우 다른 모든 옵션을 모두 가능하다. 국제열핵융합실험로 ',' 모든 기능이 " " 사용을 고려해보십시오 안됩니다. 이 모든 것에 대한 여러 차례 이름이 곧 적응할 수 있는 못하니이는 행 또는 합니다 롯이여 기다리는. 인쇄하시겠습니까 다테프라임? [ 'DataFrame.to_string ()' ) 사용 (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_string.html). 설정하시겠습니까 연산 뭔가? 이 경우, 이 순서대로 메서드을 검색하겠습니다 (목록 수정 에서 [here] (https://stackoverflow.com/questions/24870953/does-iterrows-have-performance-issues):
좋은 여러 가지 기본적인 운영 및 계산, vectorised" " 있다. 판다 (또는 시토니체트 기능을 통해 통해 인컨텍스트 누마피) 에 의해. 여기에는 (대부분) 절감, 산술, 비교, 변형 (피벗 등), 조인 및 그룹비 운영체. [에센셀 기본 기능] 대한 관련 서류를 살펴보고 적절한 방법을 찾기 위해 벡터화 (https://pandas.pydata.org/pandas-docs/stable/getting_started/basics.html # 에센셀 기본 기능) 단축시킵니다 문제다. 언제든지 쓸 수 없는 경우, 사용자 정의를 통해 자신의 존재 [사이썬 확장장치] (https://pandas.pydata.org/pandas-docs/stable/user_guide/enhancingperf.html # 사이썬 쓰기 위한 c 확장을 판다).
목록 지능형 제공하십시오 다음 기항지 경우 1) 꾨т 臾몄젣媛? 벡터화된 솔루션보다도, 2) 성능이 매우 중요한, 하지만 번거로움을 거치지 않은 만큼 중요한 코드에 시토니징, 그리고 3), re trying to # 39 의 변형 엘레멘트와이즈 실행하십시오 you& 코드에. 좁히어 는 [优秀 양의 증거를] (https://stackoverflow.com/questions/54028199/for-loops-with-pandas-when-should-i-care) 를 충분히 빠른 (심지어 가끔 빠름) 는 지능형 제안하세요 그 목록에 자주 사용되는 이동작업 판다. 공식은 간단합니다,
# iterating over one column - `f` is some function that processes your data
result = [f(x) for x in df['col']]
# iterating over two columns, use `zip`
result = [f(x, y) for x, y in zip(df['col1'], df['col2'])]
# iterating over multiple columns
result = [f(row[0], ..., row[n]) for row in df[['col1', ...,'coln']].values]
! [입력하십시오. 이미지 여기에 설명을] [1] [벤치마킹 코드, 단축시킵니다 참조입니다.] (https://gist.github.com/Coldsp33d/948f96b384ca5bdf6e8ce203ac97c9a0) 그러나 그것은 내가 언급해야한다면 isn& t # 39, 항상 이 잘라냅니다 and dry. 가끔 어떤 대답을 " operation" 경우, 가장 좋은 방법입니다. ) 는 " 설정이므로 data" 따라 다릅니다. 내 충고를 따라 상이한 데이터 전에 한 여성에게 테스트하려면 아웃해야 있다.
가끔 '동시에' 좋은 옵션을 이트로스 () '가 훨씬 빠른 아르투플스 ()' 가 펼쳐진다.
df = pd.DataFrame({'a': randn(1000), 'b': randn(1000),'N': randint(100, 1000, (1000)), 'x': 'x'})
%timeit [row.a * 2 for idx, row in df.iterrows()]
# => 10 loops, best of 3: 50.3 ms per loop
%timeit [row[1] * 2 for row in df.itertuples()]
# => 1000 loops, best of 3: 541 µs per loop
드프리애플리 사용할 수도 있습니다 () '' 반복할 행과 열을 액세스 여러 함수에 대해.
def valuation_formula(x, y):
return x * y * 0.5
df['price'] = df.apply(lambda row: valuation_formula(row['x'], row['y']), axis=1)
'' 네메트루프레 구현하는 반복자가 직접 작성할 수 있습니다
from collections import namedtuple
def myiter(d, cols=None):
if cols is None:
v = d.values.tolist()
cols = d.columns.values.tolist()
else:
j = [d.columns.get_loc(c) for c in cols]
v = d.values[:, j].tolist()
n = namedtuple('MyTuple', cols)
for line in iter(v):
yield n(*line)
이는 페데리다태프라메트리터투플스 필적할 만한 '직접'. # 39 m, 동일한 작업을 효율적으로 수행하는 i& 목표로 하고 있다.
_
내 손으로 대한 다테프라임 주어진 함수.
list(myiter(df))
[MyTuple(c1=10, c2=100), MyTuple(c1=11, c2=110), MyTuple(c1=12, c2=120)]
페데리다태프라메트리터투플스 을 (를) '또는':
list(df.itertuples(index=False))
[Pandas(c1=10, c2=100), Pandas(c1=11, c2=110), Pandas(c1=12, c2=120)]
_
def iterfullA(d):
return list(myiter(d))
def iterfullB(d):
return list(d.itertuples(index=False))
def itersubA(d):
return list(myiter(d, ['col3', 'col4', 'col5', 'col6', 'col7']))
def itersubB(d):
return list(d[['col3', 'col4', 'col5', 'col6', 'col7']].itertuples(index=False))
res = pd.DataFrame(
index=[10, 30, 100, 300, 1000, 3000, 10000, 30000],
columns='iterfullA iterfullB itersubA itersubB'.split(),
dtype=float
)
for i in res.index:
d = pd.DataFrame(np.random.randint(10, size=(i, 10))).add_prefix('col')
for j in res.columns:
stmt = '{}(d)'.format(j)
setp = 'from __main__ import d, {}'.format(j)
res.at[i, j] = timeit(stmt, setp, number=100)
res.groupby(res.columns.str[4:-1], axis=1).plot(loglog=True);
가끔 유용한 패턴이:
# Borrowing @KutalmisB df example
df = pd.DataFrame({'col1': [1, 2], 'col2': [0.1, 0.2]}, index=['a', 'b'])
# The to_dict call results in a list of dicts
# where each row_dict is a dictionary with k:v pairs of columns:value for that row
for row_dict in df.to_dict(orient='records'):
print(row_dict)
이로 인해:
{'col1':1.0, 'col2':0.1}
{'col1':2.0, 'col2':0.2}
df = pd.DataFrame({'col1': [1, 2], 'col2': [0.1, 0.2]}, index=['a', 'b'])
행뿐만 통한 반복.
for row in df.itertuples(index=False, name='Pandas'):
print np.asarray(row)
결과:
[ 1. 0.1]
[ 2. 0.2]
이 경우 = True ',' 인덱스화할 유념하십시오 인덱스 () 는 첫 번째 요소에 튜플 , 추가될 수 있는 것은 일부 응용 프로그램.
모두 내가 보기 및 수정 () '' 이트로스 값뿐만 사용하게 된다. For 루프는 사용하여 튜플) 의 개봉 (자세한 내용은 예: '행, 행' '난), I' 에 대해서만 사용할 수 있는 방법을 사용하여 볼 때 '' i '의 가치와 loc' I want to 수정하십시오 값. 여기에 기술된 이전 응답을 통해 뭔가 수정하십시오 틀렸다니까 반복 안 됩니다. "' 내가, 행의 드프리양로스 (): 만약 행 [A& # 39, & # 39;] # 39, & # 39 Old_Value& =. 드f.록 [i A& # 39, & # 39;;] # 39, & # 39 New_value&, = "'
여기서 '행' in the loop 복제본입니다 행일 보기입니다 않고 있는 것이다. 따라서 안됩니다 행일 write something like ' [& # 39, A& # 39;] # 39, & # 39, '= 다테프라임 수정하십시오 New_Value& 않을 것이다. 그러나 '로 지정하고 사용할 수 있습니다' i '와' loc 다테프라임 작업을 수행합니다.
누마피 할 수도 있습니다 '' 인덱스화를 더욱 높은 속도를 강조한다. # 39 의 반복 it& 작동됨 특정 애플리케이션에 대한 것보다 훨씬 더 좋은 이터레이션에 하지만 꼭 그렇지는 않습니다.
subset = row['c1'][0:5]
all = row['c1'][:]
캐스트 迈向 어레이에서는 할 수도 있습니다. 이 같은 행동을 취할 수 있어야 하고 싶지만 이미 indexe / 선택물의 누마피 어레이에는 실행했음 agent. 나라를 위해 필요한 문제 및
np.asarray(all)
imgs[:] = cv2.resize(imgs[:], (224,224) ) #resize every image in an hdf5 file
너무 많아 반복할 수 있는 방법을 통해 행뿐만 다테프라임 판다. 매우 간단하고 직관적인 방법을 하나 입니다.
df=pd.DataFrame({'A':[1,2,3], 'B':[4,5,6],'C':[7,8,9]})
print(df)
for i in range(df.shape[0]):
# For printing the second column
print(df.iloc[i,1])
# For printing more than one columns
print(df.iloc[i,[0,2]])