Pandas: BUG : inplaceκ°€μžˆλŠ” fillnaκ°€ loc 별 μ—¬λŸ¬ μ—΄ μ„ νƒμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2016λ…„ 12μ›” 11일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: pandas-dev/pandas

μ½”λ“œ μƒ˜ν”Œ, κ°€λŠ₯ν•œ 경우 λ³΅μ‚¬ν•˜μ—¬ λΆ™μ—¬ 넣을 μˆ˜μžˆλŠ” 예제

df = pd.DataFrame(np.random.randn(3, 4), columns=list('ABCD'))
df.iloc[1, 2:4] = np.nan
df.loc[:, ['C', 'D']].fillna(-1, inplace=True)
display(df)

μ‚°μΆœ:

A   B   C   D
0   1.387547    -1.299578   0.360015    1.290783
1   -0.395182   -0.112581   NaN NaN
2   -0.649372   -1.831869   -0.103746   0.533153

문제 μ„€λͺ…

Nan을 -1둜 μˆ˜μ •ν•  κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜μ§€λ§Œ 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€ .

λ‹€μŒ 비ꡐλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

비ꡐ (1)

λ°˜λŒ€λ‘œ λ‹€μŒ μ½”λ“œλŠ” μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.
( μœ μΌν•œ 차이점 은 iloc λ˜λŠ” loc에 μ˜ν•œ μ„ νƒμž…λ‹ˆλ‹€)

df = pd.DataFrame(np.random.randn(3, 4), columns=list('ABCD'))
df.iloc[1, 2:4] = np.nan
df.iloc[:, 2:4].fillna(-1, inplace=True)
display(df)

μ‚°μΆœ:

    A   B   C   D
0   -0.522821   -1.600520   -1.468871   0.715790
1   0.493071    0.722474    -1.000000   -1.000000
2   0.545852    -0.877946   0.993169    -0.582661

비ꡐ (2)

ν•˜λ‚˜μ˜ 열이 LOC둜 μ„ νƒν•˜λ©΄ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

df = pd.DataFrame(np.random.randn(3, 4), columns=list('ABCD'))
df.iloc[1, 2:4] = np.nan
df.loc[:, 'C'].fillna(-1, inplace=True)
display(df)

μ‚°μΆœ:

A   B   C   D
0   -0.549106   0.261093    -1.278554   2.017178
1   -1.424498   0.439482    -1.000000   NaN
2   -1.281520   1.190736    0.356319    0.416363

첫 번째 μ½”λ“œ μƒ˜ν”Œμ˜ μ˜ˆμƒ 좜λ ₯

A   B   C   D
0   1.181106    1.101231    -0.198445   0.295238
1   -0.654265   -1.129840   -1.000000   -1.000000
2   -1.070404   0.096556    0.499020    -1.835347

pd.show_versions()

여기에 좜λ ₯을 λΆ™μ—¬ λ„£μœΌμ‹­μ‹œμ˜€. pd.show_versions () 여기에

μ„€μΉ˜λœ 버전

컀밋 : μ—†μŒ
파이썬 : 3.5.2.final.0
파이썬 λΉ„νŠΈ : 64
운영체제 : Linux
OS 릴리슀 : 2.6.32-358.14.1.el6.x86_64
컴퓨터 : x86_64
ν”„λ‘œμ„Έμ„œ : x86_64
byteorder : 쑰금
LC_ALL : μ—†μŒ
LANG : zh_TW.big5
둜컬 : zh_TW.big5

νŒλ‹€ : 0.19.1
μ½” : μ—†μŒ
핍 : 9.0.1
setuptools : 27.2.0
Cython : μ—†μŒ
numpy : 1.11.2
scipy : 0.18.1
statsmodels : μ—†μŒ
xarray : μ—†μŒ
IPython : 5.1.0
μŠ€ν•‘ν¬μŠ€ : μ—†μŒ
patsy : μ—†μŒ
dateutil : 2.6.0
pytz : 2016.10
blosc : μ—†μŒ
병λͺ© ν˜„μƒ : μ—†μŒ
ν‘œ : 3.3.0
numexpr : 2.6.1
matplotlib : 1.5.3
openpyxl : μ—†μŒ
xlrd : μ—†μŒ
xlwt : μ—†μŒ
xlsxwriter : μ—†μŒ
lxml : μ—†μŒ
bs4 : μ—†μŒ
html5lib : μ—†μŒ
httplib2 : μ—†μŒ
apiclient : μ—†μŒ
sqlalchemy : μ—†μŒ
pymysql : μ—†μŒ
psycopg2 : μ—†μŒ
jinja2 : 2.8
boto : μ—†μŒ
pandas_datareader : μ—†μŒ

Indexing Missing-data Usage Question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ—¬λŸ¬ μ—΄λΏλ§Œ μ•„λ‹ˆλΌ ν•˜λ‚˜μ˜ 열도 μžˆμŠ΅λ‹ˆλ‹€.
df.loc[df.id==123, 'num'].fillna(0, inplace=True)
μž‘λ™ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€,
κ·ΈλŸ¬λ‚˜
df.loc[df.id==123, 'num'] = 123
νš¨κ³Όκ°€μžˆλ‹€

fillna ν•¨μˆ˜λ₯Ό νŽΈμ§‘ν•˜μ—¬ μ–΄λ–»μŠ΅λ‹ˆκΉŒ ?
버그 인 것 κ°™μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

당신은 사본을 μ±„μš°κ³  μžˆμŠ΅λ‹ˆλ‹€. inplace 은 μ•ˆν‹° νŒ¨ν„΄μž…λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ μž‘μ—…μ€ SettingWithCopyWarning λ₯Ό ν‘œμ‹œν•˜μ§€λ§Œμ΄ 경우 μ‰½κ²Œ 감지 ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ‚¬μš©ν•˜λ‹€

In [11]: df[['C', 'D']] = df[['C', 'D']].fillna(-1)

In [12]: df
Out[12]: 
          A         B         C         D
0  0.236782  1.408896 -0.199882  0.803165
1 -1.763881  0.232414 -1.000000 -1.000000
2  0.878515 -0.394800  0.429696 -1.829569

이 μ‹œλ„:
df.loc [:, [ 'C', 'D']] = df.loc [:, [ 'C', 'D']]. fillna (-1)
λ‚΄ μ½”λ“œμ—μ„œ .relplace와 λ™μΌν•œ 어렀움을 κ²ͺμ—ˆμŠ΅λ‹ˆλ‹€. 이것은 νš¨κ³Όκ°€ μžˆμ—ˆλ‹€.

μ—¬λŸ¬ μ—΄λΏλ§Œ μ•„λ‹ˆλΌ ν•˜λ‚˜μ˜ 열도 μžˆμŠ΅λ‹ˆλ‹€.
df.loc[df.id==123, 'num'].fillna(0, inplace=True)
μž‘λ™ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€,
κ·ΈλŸ¬λ‚˜
df.loc[df.id==123, 'num'] = 123
νš¨κ³Όκ°€μžˆλ‹€

fillna ν•¨μˆ˜λ₯Ό νŽΈμ§‘ν•˜μ—¬ μ–΄λ–»μŠ΅λ‹ˆκΉŒ ?
버그 인 것 κ°™μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰