์ง๋ชฉ ์ฌํญ:
>>> df
RP/Rsum P.value
ID
A_23_P42353 17.8 0
A_23_P369994 15.91 0
A_33_P3262440 436.7 0.0005
A_32_P199429 18.97 0
A_23_P256724 22.24 0
A_33_P3394689 24.24 0
A_33_P3403117 27.14 0
A_24_P252364 28.56 0
A_23_P99515 31.82 0
A_24_P261750 31.46 0
>>> df.dtypes
RP/Rsum float64
P.value float64
>>> ids = pandas.Series(['51513', '9201', np.nan, np.nan, '8794', '6530', '7025', '4897', '84935', '11081'])
>>> df["test"] = ids
>>> df
RP/Rsum P.value test
ID
A_23_P42353 17.8 0 NaN
A_23_P369994 15.91 0 NaN
A_33_P3262440 436.7 0.0005 NaN
A_32_P199429 18.97 0 NaN
A_23_P256724 22.24 0 NaN
A_33_P3394689 24.24 0 NaN
A_33_P3403117 27.14 0 NaN
A_24_P252364 28.56 0 NaN
A_23_P99515 31.82 0 NaN
A_24_P261750 31.46 0 NaN
>>> df.dtypes
RP/Rsum float64
P.value float64
test object
์ด๊ฒ์ float ๊ฐ์ฒด ๋ฑ์์๋ ๋ฐ์ํฉ๋๋ค. ๋ฐฉ์์ ๊ฐ ๋ฌด์์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
์ค๋ ์์นจ์๋ ๋ฐ๊ฒฌํ ์ด ๋ฌธ์ ์ ๊ด๋ จ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
>>> df = pandas.DataFrame(index=[1,2,3,4])
>>> df["test"] = pandas.Series(["B", "fdf", "344", np.nan])
>>> df["test2"] = ["B", "fdf", "344", np.nan]
>>> df test test2
1 fdf B
2 344 fdf
3 NaN 344
4 NaN nan
๋์๊ฒ ์ผ์ข ์ ์คํ ๋ฐ์ด 1 ์ค๋ฅ์ฒ๋ผ ๋ณด์ ๋๋ค.
๋ ํ๊ณ ๋ค๋ฉด ํญ๋ชฉ์ ๋ฒ์ธ์ผ๋ก ์ค์ ํ ๋ Series.reindex
์ ๋ํ ํธ์ถ๋ก ์ด์ด์ง๋๋ค.
>>> data
0 B
1 fdf
2 344
3 NaN
>>> df.index = ["A", "B", "C", "D"]
>>> data.reindex(df.index).values
array([nan, nan, nan, nan], dtype=object)
๋ ๋ง์ ํ๊ณ ๋ ์ด์ํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ ํธ์ถ๋๋ ์ธ๋ฑ์ค ์์ฑ์์ reindex
๋ก ์ด์ด์ง๋๋ค.
>>> data.index.reindex(df.index)
(Index([A, B, C, D], dtype=object), array([-1, -1, -1, -1], dtype=int32))
์ด -1์ NaN์ผ๋ก ๋ณํ๋ฉ๋๋ค.
๋ ์ ํํ ์ค๋ช ์ผ๋ก ๋ฒ๊ทธ ์ ๋ชฉ์ ์ ๋ฐ์ดํธํ์ต๋๋ค.
Series๋ ์์์ 0, ..., N-1 ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํ์ง ์์ ๋ ์ ๊ณต๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ด ์ ํํ ์ ๊ฐ ์์ํ๋ ๋์์
๋๋ค. data
๊ฐ ์์ ndarray ๋๋ ๋ชฉ๋ก์ด๋ฉด ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋์ ๋น์ ์ด ํ ๋ ์ฌ์ค :
df[col] = series
๊ทธ๋ฆฌ๊ณ ์๋ฆฌ์ฆ๊ฐ df
์ ์ธ๋ฑ์ค์ ์ ํํ ์ผ์นํฉ๋๋ค. ์ด๋ ๋ฒ๊ทธ๊ฐ ์๋ ๊ธฐ๋ฅ์
๋๋ค. :) ๊ทธ๋์
df['test'] = ids.values
๊ทํ์ ์์์ ์ ์๋ํฉ๋๋ค
์ด ๊ฒฝ์ฐ ์์ง ๋ฌธ์ํ๋์ง ์์ ๊ฒฝ์ฐ ์ด๋๊ฐ์ ๋ฌธ์ํ๋์ด์ผ ํฉ๋๋ค. ๊ทธ ๋์ ๋น์ ์ด ์ ์ํ ๋๋ก ๋ด ์์ ์ ์ฝ๋๋ฅผ ์กฐ์ ํ ๊ฒ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
http://pandas.sourceforge.net/dsintro.html#column -selection-addition-deletion
When inserting a Series that does not have the same index as the DataFrame, it will be conformed to the DataFrameโs index:
In [180]: df['one_trunc'] = df['one'][:2]
In [181]: df
Out[181]:
one flag foo one_trunc
a 1 False bar 1
b 2 False bar 2
c 3 True bar NaN
d NaN False bar NaN
You can insert raw ndarrays but their length must match the length of the DataFrameโs index.
DataFrame๊ณผ ๋์ผํ ์ธ๋ฑ์ค๊ฐ ์๋ Series๋ฅผ ์ฝ์ ํ ๋ DataFrame์ ์ธ๋ฑ์ค๋ฅผ ์ค์ํ๋ค๋ ์ฌ์ค ๋ค์ ์จ์ ์์ด๋์ด๋ ๋ฌด์์ ๋๊น?
์๋ฆฌ์ฆ์์ DataFrame์ ๋ง๋ค ๋ ๊ฒฐ๊ณผ ์ธ๋ฑ์ค๋ ๋ชจ๋ ๊ฐ๋ณ ์๋ฆฌ์ฆ ์ธ๋ฑ์ค๋ฅผ ํฌํจํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด df['new_column'] = series์ผ ๋ ์ด ์์ด๋์ด๊ฐ ์ฌ์ฉ๋์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
๊ทธ๋์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ์ง๋ง DataFrame ์ธ๋ฑ์ค์ ์ผ์นํ์ง ์๋ ๋ชจ๋ ๊ฐ์ ๋ฌด์ํฉ๋๊น?
_index extension_์ด ์กด์ฌํ๋ค๋ฉด ์ธ๋ฑ์ค(ํ์ฌ ๋์)๋ฅผ ํ์ฅํ๊ณ ์ถ์ง ์์ ๋ ํญ์ df['new_column'] = series.reindex(df.index)๋ฅผ ์ํํ ์ ์์ต๋๊น?
In [256]: df = pandas.DataFrame({'A': pandas.Series(['foo', 'bar'], index=['a', 'b']),
.....: 'B': pandas.Series([10, 20], index=['b', 'c'])})
In [257]: df
Out[257]:
A B
a foo NaN
b bar 10.000
c NaN 20.000
In [258]: df['C'] = pandas.Series(range(3), index=['a', 'c', 'd'])
In [259]: df
Out[259]:
A B C
a foo NaN 0.000
b bar 10.000 NaN
c NaN 20.000 1.000
์์ ์์์๋ DataFrame์์ ํ 'd'๋ฅผ ์์ํฉ๋๋ค.
๊ธ์, ๊ธฐ๋ณธ ์์ด๋์ด๋ DataFrame์ด "์๋ฆฌ์ฆ์ ๊ณ ์ ๊ธธ์ด dict-like ์ปจํ ์ด๋"๋ผ๋ ๊ฒ์ ๋๋ค. ๋ช ์์ ์ธ๋ฑ์ค ์์ด Series ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ DataFrame์ ๊ตฌ์ฑํ ๋ ์ด๋ค ๋ชจ๋์ ํฉ์งํฉ ์ธ์๋ ๋ช ๋ฐฑํ ์ธ๋ฑ์ค๊ฐ ์์ต๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์์์ ์ผ๋ก ํ์ฅํด์ผ ํ๋ค๋ ์ฃผ์ฅ์ ๋ณผ ์ ์์ง๋ง ์ด๋ ์ชฝ์ด๋ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Series๋ ์์์ 0, ..., N-1 ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํ์ง ์์ ๋ ์ ๊ณต๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ด ์ ํํ ์ ๊ฐ ์์ํ๋ ๋์์ ๋๋ค.
data
๊ฐ ์์ ndarray ๋๋ ๋ชฉ๋ก์ด๋ฉด ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋์ ๋น์ ์ด ํ ๋ ์ฌ์ค :df[col] = series
๊ทธ๋ฆฌ๊ณ ์๋ฆฌ์ฆ๊ฐ
df
์ ์ธ๋ฑ์ค์ ์ ํํ ์ผ์นํฉ๋๋ค. ์ด๋ ๋ฒ๊ทธ๊ฐ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. :) ๊ทธ๋์df['test'] = ids.values
๊ทํ์ ์์์ ์ ์๋ํฉ๋๋ค