我有一個 df 如圖所示包含選項資料如下:
ABCD
1 AARTIIND 29APR21 1100 PE
2 AARTIIND 29APR21 1100 PE
3 AARTIIND 29APR21 1100 PE
4 AARTIIND-I
5 AARTIIND-I
6 AARTIIND-I
7 AARTIIND-I
8 AARTIIND-I
9 AARTIIND-I
10 AARTIIND-I
11 AARTIIND-I
12 AARTIIND-I
13 AARTIIND-I
14 AARTIIND-I
15 AARTIIND-I
16 AARTIIND-I
17 AARTIIND-I
18 AARTIIND-I
現在在上面的資料框中,一些行被空格分隔成 4 部分。其他是單數詞
我打算做以下事情:
- 由它們之間的空格分隔為 4 部分的列中的行應分為 4 個單獨的列,其中每列包含一個部分
例如:AARTIIND 29APR21 1100 PE 應該分成 4 列,其中第一列將包含 AARTIIND,第二列將包含日期,第三列將包含價格,第四列將包含期權的型別,即 PE
- 未分隔的單數詞應插入第 1 列,而在其他列中應放置 NA
例如:AARTIIND-I 是單數,因此第 1 列將包含 AARTIIND-I 而第 2、3、4 列將顯示 NA
因此,轉換后的最終 df 應顯示為:
A B C D
AARTIIND 29-Apr-21 1100 PE
AARTIIND 29-Apr-21 1100 PE
AARTIIND 29-Apr-21 1100 PE
AARTIIND-I NA NA NA
AARTIIND-I NA NA NA
AARTIIND-I NA NA NA
AARTIIND-I NA NA NA
要使用空格拆分字串,我使用:
new_df[['A', 'B', 'C', 'D']] = new_df.ABCD.str.split(expand=True)
但由于間距不一致,它給了我一個錯誤:
C:\Users\sadik\anaconda3\envs\Katwal_Asset_Management\python.exe "C:/Users/sadik/PycharmProjects/Katwal_Asset_Management/import data.py"
Traceback (most recent call last):
File "C:\Users\sadik\PycharmProjects\Katwal_Asset_Management\import data.py", line 6, in <module>
df[['A', 'B', 'C', 'D']] = df.ABCD.str.split(expand=True)
File "C:\Users\sadik\anaconda3\envs\Katwal_Asset_Management\lib\site-packages\pandas\core\frame.py", line 3600, in __setitem__
self._setitem_array(key, value)
File "C:\Users\sadik\anaconda3\envs\Katwal_Asset_Management\lib\site-packages\pandas\core\frame.py", line 3639, in _setitem_array
check_key_length(self.columns, key, value)
File "C:\Users\sadik\anaconda3\envs\Katwal_Asset_Management\lib\site-packages\pandas\core\indexers.py", line 428, in check_key_length
raise ValueError("Columns must be same length as key")
ValueError: Columns must be same length as key
那么有什么方法可以使用 str.split 完成上述任務,或者在 python 中是否有任何其他方法來實作所需的輸出
uj5u.com熱心網友回復:
試試下面的代碼:
import io
import pandas as pd
text =
""" ABCD
1 AARTIIND 29APR21 1100 PE
2 AARTIIND 29APR21 1100 PE
3 AARTIIND 29APR21 1100 PE
4 AARTIIND-I
5 AARTIIND-I
6 AARTIIND-I
7 AARTIIND-I
8 AARTIIND-I
9 AARTIIND-I
10 AARTIIND-I
11 AARTIIND-I
12 AARTIIND-I
13 AARTIIND-I
14 AARTIIND-I
15 AARTIIND-I
16 AARTIIND-I
17 AARTIIND-I
18 AARTIIND-I"""
df = pd.read_csv(io.StringIO(text))
df = df[' ABCD'].str.split(' ', expand=True)
df.columns = ['A','B','C','D','E','F','G']
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383797.html
