如何使用 Python 将选定的特定行拆分为多行
How to split a specific selected row to multiple rows using Python
我有一个示例数据框
import pandas as pd
import numpy as np
data = {"Key" : ["First Row", "Sample sample first row: a Row to be splitted $ 369", "Sample second row : a Depreciation $ 458", "Last Row"],
"Value1" : [365, 265.0, np.nan, 256],
"value2" : [789, np.nan, np.nan, np.nan]
}
df = pd.DataFrame(data)
print(df)
Key Value1 value2
0 First Row 365.0 789.0
1 Sample sample first row: a Row to be splitted $ 369 265.0 NaN
2 Sample second row : a Depreciation $ 458 NaN NaN
3 Last Row 256.0 NaN
我知道使用
将任何类别拆分为多行
我找不到在所选部分拆分一行字符串。
期望输出
Key Value1 value2
0 First Row 365.0 789.0
1 Sample sample first row: 265.0 NaN
2 a Row to be splitted $ 369 NaN
3 Sample second row : NaN NaN
4 Depreciation $ 458 NaN
5 Last Row 256.0 NaN
分 3 个步骤使用 .explode
.str.extract()
和 str.replace()
df1 = df.assign(Key=df['Key'].str.split(':')).explode('Key')
df1['Value1'] = df1['Value1'].fillna(
df1['Key'].str.extract('$\s(\d+)').astype(float)[0]
)
df1['Key'] = df1['Key'].str.replace('($\s)(\d+)',r'',regex=True)
Key Value1 value2
0 First Row 365.0 789.0
1 Sample sample first row 265.0 NaN
1 a Row to be splitted $ 265.0 NaN
2 Sample second row NaN NaN
2 a Depreciation $ 458.0 NaN
3 Last Row 256.0 NaN
split
、explode
、extract
和 update
我们可以 split
一个或多个 space
字符上的 Key
列 :
,然后 explode
上的数据框 Key
,接下来 extract
来自 Key
列的数字,前面有 $
符号和 update
Value1
[=27= 中的相应值]
df1 = df.assign(Key=df['Key'].str.split(r'(?<=:)\s+')).explode('Key')
df1['Value1'].update(df1['Key'].str.extract(r'$\s*(\d+)', expand=False).astype(float))
>>> df1
Key Value1 value2
0 First Row 365.0 789.0
1 Sample sample first row: 265.0 NaN
1 a Row to be splitted $ 369 369.0 NaN
2 Sample second row : NaN NaN
2 a Depreciation $ 458 458.0 NaN
3 Last Row 256.0 NaN
我有一个示例数据框
import pandas as pd
import numpy as np
data = {"Key" : ["First Row", "Sample sample first row: a Row to be splitted $ 369", "Sample second row : a Depreciation $ 458", "Last Row"],
"Value1" : [365, 265.0, np.nan, 256],
"value2" : [789, np.nan, np.nan, np.nan]
}
df = pd.DataFrame(data)
print(df)
Key Value1 value2
0 First Row 365.0 789.0
1 Sample sample first row: a Row to be splitted $ 369 265.0 NaN
2 Sample second row : a Depreciation $ 458 NaN NaN
3 Last Row 256.0 NaN
我知道使用
我找不到在所选部分拆分一行字符串。
期望输出
Key Value1 value2
0 First Row 365.0 789.0
1 Sample sample first row: 265.0 NaN
2 a Row to be splitted $ 369 NaN
3 Sample second row : NaN NaN
4 Depreciation $ 458 NaN
5 Last Row 256.0 NaN
分 3 个步骤使用 .explode
.str.extract()
和 str.replace()
df1 = df.assign(Key=df['Key'].str.split(':')).explode('Key')
df1['Value1'] = df1['Value1'].fillna(
df1['Key'].str.extract('$\s(\d+)').astype(float)[0]
)
df1['Key'] = df1['Key'].str.replace('($\s)(\d+)',r'',regex=True)
Key Value1 value2
0 First Row 365.0 789.0
1 Sample sample first row 265.0 NaN
1 a Row to be splitted $ 265.0 NaN
2 Sample second row NaN NaN
2 a Depreciation $ 458.0 NaN
3 Last Row 256.0 NaN
split
、explode
、extract
和 update
我们可以 split
一个或多个 space
字符上的 Key
列 :
,然后 explode
上的数据框 Key
,接下来 extract
来自 Key
列的数字,前面有 $
符号和 update
Value1
[=27= 中的相应值]
df1 = df.assign(Key=df['Key'].str.split(r'(?<=:)\s+')).explode('Key')
df1['Value1'].update(df1['Key'].str.extract(r'$\s*(\d+)', expand=False).astype(float))
>>> df1
Key Value1 value2
0 First Row 365.0 789.0
1 Sample sample first row: 265.0 NaN
1 a Row to be splitted $ 369 369.0 NaN
2 Sample second row : NaN NaN
2 a Depreciation $ 458 458.0 NaN
3 Last Row 256.0 NaN