source

빈 열을 데이터 프레임에 추가하려면 어떻게 해야 합니까?

itover 2023. 1. 5. 20:27
반응형

빈 열을 데이터 프레임에 추가하려면 어떻게 해야 합니까?

에게 빈 DataFrame 오브젝트?한 최고의 것은

df['foo'] = df.apply(lambda _: '', axis=1)

덜 왜곡된 방법은 없나요?

올바르게 이해한 경우, 과제는 다음과 같이 채워져야 합니다.

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
   A  B
0  1  2
1  2  3
2  3  4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

DSM의 답변을 추가하고 이와 관련된 질문을 바탕으로 접근 방식을 두 가지 사례로 나눕니다.

  • 컬럼 : 빈 을 새만 하면 예: " " " " : " " " " ( " 。df['C'] = np.nan

  • 사용법: 사용법.reindex(columns=[...]) 데이터 프레임의 컬럼 인덱스에 새 컬럼을 추가하는 판다 방법.이것은, 새로운 행을 복수 추가하는 경우에도 유효합니다..reindex(rows=[...])Panda20)에서는, 「Panda(v>0.20)」를 할 수 axis합니다.columns ★★★★★★★★★★★★★★★★★」rows.

여러 열을 추가하는 예를 다음에 나타냅니다.

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])

또는

mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1)  # version > 0.20.0

새로운 (빈) 데이터 프레임을 기존 데이터 프레임에 언제든지 연결할 수 있지만, 내게는 그렇게 느껴지지 않습니다.

보다 심플한 솔루션은 다음과 같습니다.

df = df.reindex(columns = header_list)                

여기서 "syslog_list"는 표시할 헤더의 목록입니다.

목록에 포함된 헤더 중 아직 데이터 프레임에 없는 헤더는 아래 빈 셀과 함께 추가됩니다.

그래서 만약에

header_list = ['a','b','c', 'd']

그러면 c와 d가 공백 셀이 있는 열로 추가됩니다.

마음에 드는 것:

df['new'] = pd.Series(dtype='int')

# or use other dtypes like 'float', 'object', ...

프레임이 , 이 행에 「」만 되어 있지 않은 합니다.NaN을 사용하다

「」의 지정dtype엄밀하게 필요하지는 않지만, 새로운 판다버전은 새로운 판다를DeprecationWarning를 지정합니다.

「 」부터 합니다.v0.16.0를 사용하여 새로운 열(싱글/슬롯)을 에 할당할 수 있습니다.DF. 이은 의 DF.

이것은 반환된 데이터 프레임에서 일련의 연쇄 작업을 직접 실행하는 경우 단순 할당에 비해 유리합니다.

것으로 간주하다DF@DSM에 의해:

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
   A  B
0  1  2
1  2  3
2  3  4

df.assign(C="",D=np.nan)
Out[21]:
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

이렇게 하면 새로 생성된 열과 함께 이전 모든 열이 포함된 복사본이 반환됩니다. ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.DF수정하면 쓸 수 있습니다.df = df.assign(...)「」는 않기 에,inplace현재 동작하고 있습니다.

목록에서 열 이름을 추가하려면

df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
    df[i]=np.nan

@emunsing의 답변은 여러 컬럼을 추가하는 것은 매우 멋집니다만, python 2.7에서는 사용할 수 없었습니다.대신, 나는 이것이 효과가 있다는 것을 알았다.

mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])

사용할 수 있다df.insert(index_to_insert_at, column_header, init_value)특정 인덱스에 새 열을 삽입합니다.

cost_tbl.insert(1, "col_name", "") 

위의 문장은 첫 번째 열 뒤에 빈 열을 삽입합니다.

여러 열에 대해서도 작동합니다.

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
   A  B
0  1  2
1  2  3
2  3  4

df1 = pd.DataFrame(columns=['C','D','E'])
df = df.join(df1, how="outer")

>>>df
    A   B   C   D   E
0   1   2   NaN NaN NaN
1   2   3   NaN NaN NaN
2   3   4   NaN NaN NaN

그런 다음 열에서 원하는 작업을 수행합니다.pd.Series.fillna(),pd.Series.map()기타.

아래 코드는 "기존 데이터 프레임에 빈 열 n개를 추가하는 방법"이라는 질문에 대처하고 있습니다.유사한 문제에 대한 해결책을 한 곳에 보관하기 위해 여기에 추가합니다.

접근법 1(1~64개의 열 이름을 사용하여 64개의 열을 추가로 작성)

m = list(range(1,65,1)) 
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists

접근법 2(1-64의 열 이름을 사용하여 64개의 열을 추가로 작성)

df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')

할수있습니다

df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe 
df["C"] = ""
df["D"] = np.nan

할당에 따라 SettingWithCopyWarning 경고가 표시됩니다.

DataFrame에서 슬라이스 복사본에 값을 설정하려고 합니다.대신 .loc[row_param,col_parames] = 값을 사용해 보십시오.

따라서 삽입을 사용하는 것이 좋습니다.

df.insert(index, column-name, column-value)

비워둘 열 목록이 있는 경우 다음을 사용할 수 있습니다.assign, 이해 dict, 그 다음에 dict를 풉니다.

>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> nan_cols_name = ["C","D","whatever"]
>>> df.assign(**{col:np.nan for col in nan_cols_name})

   A  B   C   D  whatever
0  1  2 NaN NaN       NaN
1  2  3 NaN NaN       NaN
2  3  4 NaN NaN       NaN

또한 열마다 다른 값을 원하는 경우 여러 개의 dict를 언팩할 수 있습니다.

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
nan_cols_name = ["C","D","whatever"]
empty_string_cols_name = ["E","F","bad column with space"]
df.assign(**{
    **{col:np.nan for col in my_empy_columns_name}, 
    **{col:"" for col in empty_string_cols_name}
            }
         )

처음에 내 대답을 잘 설명하지 못해서 미안해.기존 데이터 프레임에 새 열을 추가하는 다른 방법도 있습니다.첫 번째 스텝에서는 df_module이라고 하는 새로운 빈 데이터 프레임(데이터 프레임 내의 모든 컬럼과 추가할 신규 또는 소수의 컬럼 포함)을 만들고 df_module과 데이터 프레임을 결합합니다.

df_temp = pd.DataFrame(columns=(df_null.columns.tolist() + ['empty']))
df = pd.concat([df_temp, df])

그것이 최선의 해결책일 수도 있지만, 이 문제에 대해 생각하는 또 다른 방법이다.

이 방법을 사용하는 이유는 항상 이 경고가 표시되기 때문입니다.

: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  df["empty1"], df["empty2"] = [np.nan, ""]

훌륭해 경고를 비활성화하는 방법을 찾았어

pd.options.mode.chained_assignment = None 

이러한 솔루션을 찾고 있는 이유는 단순히 pd.concat 함수를 사용하여 컬럼 단위로 결합되고 xlsxwriter를 사용하여 Excel로 작성된 여러 DF 사이에 공간을 추가하기 위함입니다.

df[' ']=df.apply(lambda _: '', axis=1)
df_2 = pd.concat([df,df1],axis=1)                #worked but only once. 
# Note: df & df1 have the same rows which is my index. 
#
df_2[' ']=df_2.apply(lambda _: '', axis=1)       #didn't work this time !!?     
df_4 = pd.concat([df_2,df_3],axis=1)

그리고 두 번째 람다 콜을

df_2['']=''                                 #which appears to add a blank column
df_4 = pd.concat([df_2,df_3],axis=1)

테스트한 출력은 xlsxwriter를 사용하여 우수합니다.주피터 공백 열은 xlsx 형식이 없지만 excel과 동일하게 표시됩니다.두 번째 람다 호출이 왜 안 됐는지 모르겠어요

언급URL : https://stackoverflow.com/questions/16327055/how-to-add-an-empty-column-to-a-dataframe

반응형