확실한! 설정:
>>> import pandas as pd
>>> from random import randint
>>> df = pd.DataFrame({'A': [randint(1, 9) for x in range(10)],
'B': [randint(1, 9)*10 for x in range(10)],
'C': [randint(1, 9)*100 for x in range(10)]})
>>> df
A B C
0 9 40 300
1 9 70 700
2 5 70 900
3 8 80 900
4 7 50 200
5 9 30 900
6 2 80 700
7 2 80 400
8 5 80 300
9 7 70 800
열 연산을 적용하고 부울 시리즈 객체를 얻을 수 있습니다.
>>> df["B"] > 50
0 False
1 True
2 True
3 True
4 False
5 False
6 True
7 True
8 True
9 True
Name: B
>>> (df["B"] > 50) & (df["C"] == 900)
0 False
1 False
2 True
3 True
4 False
5 False
6 False
7 False
8 False
9 False
[업데이트, 새 스타일로 전환 .loc
] :
그런 다음이를 사용하여 객체를 색인 할 수 있습니다. 읽기 액세스를 위해 다음과 같은 인덱스를 연결할 수 있습니다.
>>> df["A"][(df["B"] > 50) & (df["C"] == 900)]
2 5
3 8
Name: A, dtype: int64
그러나 쓰기 액세스를 위해이 작업을 수행하는 뷰와 사본의 차이로 인해 문제가 발생할 수 있습니다. .loc
대신 사용할 수 있습니다 .
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"]
2 5
3 8
Name: A, dtype: int64
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"].values
array([5, 8], dtype=int64)
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"] *= 1000
>>> df
A B C
0 9 40 300
1 9 70 700
2 5000 70 900
3 8000 80 900
4 7 50 200
5 9 30 900
6 2 80 700
7 2 80 400
8 5 80 300
9 7 70 800
실수로 입력했는지 참고 == 900
하지 != 900
, 나 ~(df["C"] == 900)
,하지만 난 그것을 해결하기 위해 너무 게으른 해요. 독자를위한 운동. : ^)
df.query
그리고pd.eval
이 사용 사례에 대한 좋은 맞는 것처럼 보인다.pd.eval()
함수 계열, 기능 및 사용 사례 에 대한 자세한 내용은 pd.eval ()을 사용하여 팬더의 Dynamic Expression Evaluation을 방문하십시오 .