簡體   English   中英

拆分Dataframe列值並分配給其他列,Python 3.6

[英]Splitting Dataframe column values and assigning to other columns, Python 3.6

我在數據框中有以下數據,並希望與第一次出現的情況分開;

DF:

IT;3P;J;1;C;A;TO1;A;A;A;I
KR;3P;J;1;C;A;TO1;A;A;A;I
MX;3P;J;1;C;A;TO1;A;A;A;I
NL;3P;J;1;C;A;TO1;A;A;A;I
NZ;3P;J;1;C;A;TO1;A;A;A;I
PH;3P;J;1;C;A;TO1;A;A;A;I
PT;3P;J;1;C;A;TO1;A;A;A;I
RU;3P;J;1;C;A;TO1;A;A;A;I
SG;3P;J;1;C;A;TO1;A;A;A;I
TR;3P;J;1;C;A;TO1;A;A;A;I
US;3P;J;1;C;A;TO1;A;A;A;I

df['itemNew'] = df['item'].str.split(';', 1)[1]

給定錯誤:ValueError:值的長度與索引的長度不匹配

在新列中的預期結果如下:

3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I
3P;J;1;C;A;TO1;A;A;A;I

試過這個:

df['itemNew'] = ''
df['itemNew'] = df['item'].str.split(';', 1).str[1]

出現警告消息:SettingWithCopyWarning:試圖在DataFrame的切片副本上設置一個值。 嘗試改用.loc [row_indexer,col_indexer] = value

似乎您需要str來選擇split創建的第二個列表:

df['itemNew'] = df['item'].str.split(';', 1).str[1]

使用copy

df= Mapping.loc[Mapping['DatasetId'].isin(['bisdss2016', 'imffsi2017apr', 'imfifss2017', 'imfifss2017aug', 'wbdb2016oct'])].copy()

如果以后在df修改值,您會發現修改不會傳播回原始數據( Mapping ),並且Pandas會發出警告。

使用列表理解。 在這種情況下,至少(沒有NaNs ),它比str.methods快2 str.methods

In [233]: df['itemNew'] = [x.split(';', 1)[1] for x in df['item'].values]

時間,這也讓我感到驚訝。

In [229]: df.shape
Out[229]: (11000, 1)

In [230]: %timeit [x.split(';', 1)[1] for x in df['item'].values]
100 loops, best of 3: 5.42 ms per loop

In [231]: %timeit df['item'].str.split(';', 1).str[1]
100 loops, best of 3: 11.4 ms per loop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM