rra*_*rra 7 python dataframe pandas
我有下面的熊猫数据框。
d = {'col1': [1, 2,3,4,5,60,0,0,6,3,2,4],'col3': [1, 22,33,44,55,60,1,5,6,3,2,4],'Name': ['2a df a1asd_V1', 'xcd a2asd_V3','23vg aabsd_V1','dfgdf_aabsd_V0','a3as d_V1','aa bsd_V3','aasd_V4','aabsd_V4','aa_adn sd_V15',np.nan,'aasd_V12','aasd120Abs'],'Date': ['2021-06-13', '2021-06-13','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16']}
dff = pd.DataFrame(data=d)
dff
col1 col3 Name Date
0 1 1 2a df a1asd_V1 2021-06-13
1 2 22 xcd a2asd_V3 2021-06-13
2 3 33 23vg aabsd_V1 2021-06-13
3 4 44 dfgdf_aabsd_V0 2021-06-14
4 5 55 a3as d_V1 2021-06-15
5 60 60 aa bsd_V3 2021-06-15
6 0 1 aasd_V4 2021-06-13
7 0 5 aabsd_V4 2021-06-16
8 6 6 aa_adn sd_V10 2021-06-13
9 3 3 NaN 2021-06-13
10 2 2 aasd_V12 2021-06-13
11 4 4 aasd120Abs 2021-06-16
Run Code Online (Sandbox Code Playgroud)
我想根据“名称”列创建两个新列。我想提取名称列中的字符串部分,例如 V1、V2、V3、V4...V20 等。另外,如果名称字符串末尾没有类似的内容或者名称行为空,则只想创建一个空单元格。所以我想要类似下面的 pandas 数据框的东西。
col1 col3 Name Date Version Version
0 1 1 2a df a1asd_V1 2021-06-13 V1 Version 1
1 2 22 xcd a2asd_V3 2021-06-13 V3 Version 3
2 3 33 23vg aabsd_V1 2021-06-13 V1 Version 1
3 4 44 dfgdf_aabsd_V0 2021-06-14 V0 Version 0
4 5 55 a3as d_V1 2021-06-15 V1 Version 1
5 60 60 aa bsd_V3 2021-06-15 V3 Version 3
6 0 1 aasd_V4 2021-06-13 V4 Version 4
7 0 5 aabsd_V4 2021-06-16 V4 Version 4
8 6 6 aa_adn sd_V10 2021-06-13 V10 Version 10
9 3 3 NaN 2021-06-13
10 2 2 aasd_V12 2021-06-13 V12 Version 12
11 4 4 aasd120Abs 2021-06-16
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?我知道在 SQL 中我们可以使用“LIKE”来做到这一点
WHEN `Name` LIKE '%V10%' THEN 'Verison 10'.
Run Code Online (Sandbox Code Playgroud)
python 中是否有类似的命令或任何其他方法可以做到这一点?
提前致谢!任何帮助表示赞赏!
Cor*_*ien 13
str.extract与正则表达式一起使用str.replace并重命名值:
dff['Version_short'] = dff['Name'].str.extract('_(V\d+)$').fillna('')
dff['Version_long'] = dff['Version_short'].str.replace('V', 'Version ')
Run Code Online (Sandbox Code Playgroud)
输出:
>>> dff
col1 col3 Name Date Version_short Version_long
0 1 1 2a df a1asd_V1 2021-06-13 V1 Version 1
1 2 22 xcd a2asd_V3 2021-06-13 V3 Version 3
2 3 33 23vg aabsd_V1 2021-06-13 V1 Version 1
3 4 44 dfgdf_aabsd_V0 2021-06-14 V0 Version 0
4 5 55 a3as d_V1 2021-06-15 V1 Version 1
5 60 60 aa bsd_V3 2021-06-15 V3 Version 3
6 0 1 aasd_V4 2021-06-13 V4 Version 4
7 0 5 aabsd_V4 2021-06-16 V4 Version 4
8 6 6 aa_adn sd_V15 2021-06-13 V15 Version 15
9 3 3 NaN 2021-06-13
10 2 2 aasd_V12 2021-06-13 V12 Version 12
11 4 4 aasd120Abs 2021-06-16
Run Code Online (Sandbox Code Playgroud)
您可以使用str.extract一个简短的正则表达式 ( _(V\d+)$):
dff['Version'] = dff['Name'].str.extract('_(V\d+)$')
dff['Version_long'] = 'Version '+dff['Version'].str[1:]
Run Code Online (Sandbox Code Playgroud)
注意。我以不同的方式命名第二列,因为两列同名是有问题的(尽管并非完全不可能)
输出:
col1 col3 Name Date Version Version_long
0 1 1 2a df a1asd_V1 2021-06-13 V1 Version 1
1 2 22 xcd a2asd_V3 2021-06-13 V3 Version 3
2 3 33 23vg aabsd_V1 2021-06-13 V1 Version 1
3 4 44 dfgdf_aabsd_V0 2021-06-14 V0 Version 0
4 5 55 a3as d_V1 2021-06-15 V1 Version 1
5 60 60 aa bsd_V3 2021-06-15 V3 Version 3
6 0 1 aasd_V4 2021-06-13 V4 Version 4
7 0 5 aabsd_V4 2021-06-16 V4 Version 4
8 6 6 aa_adn sd_V15 2021-06-13 V15 Version 15
9 3 3 NaN 2021-06-13 NaN NaN
10 2 2 aasd_V12 2021-06-13 V12 Version 12
11 4 4 aasd120Abs 2021-06-16 NaN NaN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19924 次 |
| 最近记录: |