programing

여러 개의 빈 열을 팬더 DataFrame에 추가

jooyons 2023. 10. 17. 20:13
반응형

여러 개의 빈 열을 팬더 DataFrame에 추가

여러 개의 빈 열을 a에 추가하려면 어떻게 해야 합니까?DataFrame리스트에서?

할 수 있습니다.

df["B"] = None
df["C"] = None
df["D"] = None

하지만 난 할 수 없어요

df[["B", "C", "D"]] = None

KeyError: "['B' 'C' 'D'] not in index"

새 열을 추가하는 데 사용할 수 있습니다.

In [18]: df = pd.DataFrame(np.random.randint(10, size=(5,1)), columns=['A'])

In [19]: df
Out[19]: 
   A
0  4
1  7
2  0
3  7
4  6

In [20]: df.reindex(columns=list('ABCD'))
Out[20]: 
   A   B   C   D
0  4 NaN NaN NaN
1  7 NaN NaN NaN
2  0 NaN NaN NaN
3  7 NaN NaN NaN
4  6 NaN NaN NaN

reindex나열된 순서대로 열이 나타나는 새 DataFrame을 반환합니다.

In [31]: df.reindex(columns=list('DCBA'))
Out[31]: 
    D   C   B  A
0 NaN NaN NaN  4
1 NaN NaN NaN  7
2 NaN NaN NaN  0
3 NaN NaN NaN  7
4 NaN NaN NaN  6

reindex방법적으로fill_value매개 변수도:

In [22]: df.reindex(columns=list('ABCD'), fill_value=0)
Out[22]: 
   A  B  C  D
0  4  0  0  0
1  7  0  0  0
2  0  0  0  0
3  7  0  0  0
4  6  0  0  0

데이터 프레임을 사용합니다.

In [23]:
df = pd.DataFrame(columns=['A'])
df

Out[23]:
Empty DataFrame
Columns: [A]
Index: []

In [24]:    
pd.concat([df,pd.DataFrame(columns=list('BCD'))])

Out[24]:
Empty DataFrame
Columns: [A, B, C, D]
Index: []

따라서 원래 df를 포함하는 목록과 추가하려는 열이 있는 새 목록을 통과하면 추가 열이 있는 새 df가 반환됩니다.


주의 사항: 다른 답변 및/또는 코멘트 토론에서 성과에 대한 논의를 확인합니다.reindex성능이 중요한 경우 선호할 수 있습니다.

이전 열의 이름을 다시 쓰지 않으려면 reindex를 사용할 수 있습니다.

df.reindex(columns=[*df.columns.tolist(), 'new_column1', 'new_column2'], fill_value=0)

전체 예제:

In [1]: df = pd.DataFrame(np.random.randint(10, size=(3,1)), columns=['A'])

In [1]: df
Out[1]: 
   A
0  4
1  7
2  0

In [2]: df.reindex(columns=[*df.columns.tolist(), 'col1', 'col2'], fill_value=0)
Out[2]: 

   A  col1  col2
0  1     0     0
1  2     0     0

열 이름을 가진 목록이 이미 있는 경우:

In [3]: my_cols_list=['col1','col2']

In [4]: df.reindex(columns=[*df.columns.tolist(), *my_cols_list], fill_value=0)
Out[4]: 
   A  col1  col2
0  1     0     0
1  2     0     0

대체 솔루션 요약:

columns_add = ['a', 'b', 'c']
  1. 루프의 경우:

    for newcol in columns_add:
        df[newcol]= None
    
  2. dict 메서드:

    df.assign(**dict([(_,None) for _ in columns_add]))
    
  3. 튜플 할당:

    df['a'], df['b'], df['c'] = None, None, None
    

루프만 사용하지 않는 이유:

for newcol in ['B','C','D']:
    df[newcol]=np.nan

팬더 방송을 이용할 수 있습니다.

df = pd.DataFrame({'A': [1, 1, 1]})

df[['B', 'C']] = 2, 3
# df[['B', 'C']] = [2, 3]

결과:

   A  B  C
0  1  2  3
1  1  2  3
2  1  2  3

빈 열 추가하기

df[['B', 'C', 'D']] = 3 * [np.nan]

결과:

   A   B   C   D
0  1 NaN NaN NaN
1  1 NaN NaN NaN
2  1 NaN NaN NaN

사용합니다.

df["B"], df["C"], df["D"] = None, None, None

아니면

df["B"], df["C"], df["D"] = ["None" for a in range(3)]

재미있는 방법 목록에 추가해 보겠습니다.

columns_add = ['a', 'b', 'c']
df = df.assign(**dict(zip(columns_add, [0] * len(columns_add)))

언급URL : https://stackoverflow.com/questions/30926670/add-multiple-empty-columns-to-pandas-dataframe

반응형