我有一个dataframe df,在某些列中有两个条目,中间用,分隔.我想编写一个函数,对于包含两个条目的列,只提取,之前的条目.

示例:20.15,20.15拆分为20.15

查看数据帧

import pandas as pd
 
# initialize data of lists.
data = {'Name': ['Tom', 'nick', 'krish', 'jack','Phil','Shaq','Frank','Jerome','Arpan','Sean'],
        'Age': ['20.15,20.15', '21.02,21.02', '19.04,19.04','18.17,18.17','65.77,65.77','34.19,34.19','76.12,76.12','65.55,65.55','55.03,55.03','41.11,41.11'],
        'Score_1':['10,10', '21,21', '19,19','18,18','65,65','34,34','76,76','65,65','55,55','41,41'],
        'Score_2':['11,11', '31,31', '79,79','38,38','75,75','94,94','26,26','15,15','96,96','23,23'],
        'Score_3':['101,101', '212,212', '119,119','218,218','765,765','342,342','706,706','615,615','565,565','491,491'],
        'Type':[ 'A','C','D','F','B','E','H','G','J','K'],
        'bonus':['3.13,3.13','5.02,5.02','4.98,4.98','6.66,6.66','0.13,0.13','4.13,4.13','5.12,5.12','4.28,4.28','6.16,6.16','5.13,5.13'],
        'delta':[0.1,0.3,2.3,8.2,7.1,5.7,8.8,9.1,4.3,2.9]}
 
# Create DataFrame
df = pd.DataFrame(data)
 
# Print the output.
print(df)

所需输出(可以复制和粘贴)(&P)

# initialize data of lists.
df1 = {'Name': ['Tom', 'nick', 'krish', 'jack','Phil','Shaq','Frank','Jerome','Arpan','Sean'],
        'Age': ['20.15', '21.02', '19.04','18.17','65.77','34.19','76.12','65.55','55.03','41.11'],
        'Score_1':['10', '21', '19','18','65','34','76','65','55','41'],
        'Score_2':['11', '31', '79','38','75','94','26','15','96','23'],
        'Score_3':['101', '212', '119','218','765','342','706','615','565','491'],
        'Type':[ 'A','C','D','F','B','E','H','G','J','K'],
        'bonus':['3.13','5.02','4.98','6.66','0.13','4.13','5.12','4.28','6.16','5.13'],
        'delta':[0.1,0.3,2.3,8.2,7.1,5.7,8.8,9.1,4.3,2.9]}
 
# Create DataFrame
df2 = pd.DataFrame(df1)
 
# Print the output.
print(df2)

我需要一个更强大的功能的帮助,请参见下面的try

def stringsplitter(data,column):
# select columns with object datatype
  data1 = data.select_dtypes(include=['object'])
  cols= data1[column].str.split(',', n=1).str
  print(cols[0])

# applying stringsplitter to the dataframe

final_df = df.apply(stringsplitter)

谢谢你的帮助

推荐答案

您可以创建DataFrame,然后编辑带有逗号的列.请注意,只有当您确定只有具有重复数据的列的值中有逗号时,这才会起作用.

# Create DataFrame
df = pd.DataFrame(data)

for col in df.columns:
    if df[col].dtype == "object":
        df[col] = df[col].astype(str).str.split(",").str[0]

# Print the output.
print(df)

结果将是:

     Name    Age Score_1 Score_2 Score_3 Type bonus  delta
0     Tom  20.15      10      11     101    A  3.13    0.1
1    nick  21.02      21      31     212    C  5.02    0.3
2   krish  19.04      19      79     119    D  4.98    2.3
3    jack  18.17      18      38     218    F  6.66    8.2
4    Phil  65.77      65      75     765    B  0.13    7.1
5    Shaq  34.19      34      94     342    E  4.13    5.7
6   Frank  76.12      76      26     706    H  5.12    8.8
7  Jerome  65.55      65      15     615    G  4.28    9.1
8   Arpan  55.03      55      96     565    J  6.16    4.3
9    Sean  41.11      41      23     491    K  5.13    2.9

Python相关问答推荐

使用numpy提取数据块

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

如何将ctyles.POINTER(ctyles.c_float)转换为int?

比较2 PD.数组的令人惊讶的结果

try 在树叶 map 上应用覆盖磁贴

Python库:可选地支持numpy类型,而不依赖于numpy

在vscode上使用Python虚拟环境时((env))

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

在pandas中使用group_by,但有条件

Pandas Data Wrangling/Dataframe Assignment

搜索按钮不工作,Python tkinter

用SymPy在Python中求解指数函数

巨 Python :逆向猜谜游戏

如何在Great Table中处理inf和nans

polars:有效的方法来应用函数过滤列的字符串

如何防止html代码出现在quarto gfm报告中的pandas表之上

Polars表达式无法访问中间列创建表达式

比较两个有条件的数据帧并删除所有不合格的数据帧

通过对列的其余部分进行采样,在Polars DataFrame中填充_null`?

PYODBC错误(SQL包含-26272个参数标记,但提供了235872个参数,HY 000)