빈 열을 데이터 프레임에 추가하려면 어떻게 해야 합니까?
에게 빈 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
'source' 카테고리의 다른 글
| Python 객체가 문자열인지 확인하는 방법 (0) | 2023.01.05 |
|---|---|
| PHP에서 문자열을 부울 값으로 구문 분석 (0) | 2023.01.05 |
| MySQL 클러스터 또는 MariaDB Galera (0) | 2023.01.05 |
| C 또는 C++의 작은따옴표 대 큰따옴표 (0) | 2023.01.05 |
| CURLOPT_POSTFILDS의 컬 POST 형식 (0) | 2023.01.05 |