【问题标题】:How to remove first chracter from the string and store the same into new column in Pandas?如何从字符串中删除第一个字符并将其存储到 Pandas 的新列中?
【发布时间】:2019-05-30 13:14:42
【问题描述】:

我有一个名为 Student name 的列名,每行有四个或五个学生姓名——比如 John mills、Tim Harry、Alex win、Kate结婚...我想取前两个学生姓名并存储到一个名为 Student 1 和 Student 2 的新列。名称已与逗号分隔。

我创建了一个函数,我可以提取第一个学生姓名。结果存储到我的名为 student_0 的数据框中

def find_student(df2): 
for i in range(2): 
df2[f"student name_{i}"] = [x.split(',')[i] for x in df2["student name"]] 
return df2 
new_df = find_student(df2)

df2 是我的数据框名称

我没有得到第二个学生的名字。请告知

【问题讨论】:

  • 你能发一个df2["Actors"] 的样本
  • 对不起 Rakesh.. 那是学生名而不是演员。打字错误。很抱歉给您带来不便
  • 确定df2["student name"] 的样本
  • 学生姓名 1) 约翰米尔斯、蒂姆哈里、亚历克斯获胜、凯特结婚 2) 白兰度十一世、詹姆斯凯恩、理查德 S.卡斯特拉诺 3) 希思莱杰、亚伦埃克哈特、迈克尔凯恩

标签: python-3.x pandas


【解决方案1】:

如果需要姓名和姓氏,请使用Series.str.splitDataFrame.iloc 的位置选择前两列:

print (df2)
                                   student name
0   John mills, Tim Harry, Alex win, Kate marry
1  Brando XI, James Caan, Richard S. Castellano
2   Heath Ledger, Aaron Eckhart, Michael Caine 

N = 2
df3 = df2["student name"].str.split(', ', expand=True).iloc[:, :N]
#rename columns names
df3.columns = [f"student name_{i+1}" for i in range(len(df3.columns))]
print (df3)
  student name_1 student name_2
0     John mills      Tim Harry
1      Brando XI     James Caan
2   Heath Ledger  Aaron Eckhart

或者使用列表推导:

N = 2
L = [x.split(',')[:2] for x in df2["student name"]]
df3 = pd.DataFrame(L, columns=[f"student name_{i+1}" for i in range(N)])
print (df3)
  student name_1  student name_2
0     John mills       Tim Harry
1      Brando XI      James Caan
2   Heath Ledger   Aaron Eckhart

如果只需要名字:

N = 2
L = [[y.split()[0] for y in x.split(',')[:2]] for x in df2["student name"]]
df3 = pd.DataFrame(L, columns=[f"student name_{i+1}" for i in range(N)])
print (df3)
  student name_1 student name_2
0           John            Tim
1         Brando          James
2          Heath          Aaron

#join to original if necessary
df2 = df2.join(df3)

【讨论】:

  • 你在网上吗?
  • @Jason 抱歉,离线 4 天,仅限电话。
  • 嗨,你今天在吗?
  • @Jason - 是的,我是
  • 我有一个类型为对象的数据框。我想转换成浮点数。我做了一个用户定义的函数 def convert(x): x = x.astype(str).astype(float) return x.... 将它传递给 churn.iloc[:, 6:20] = churn.iloc[: , 6:20].apply(convert).. 我没有收到错误,但是对象类型没有变成浮点数。你能建议吗?
【解决方案2】:

试试这个

def find_student(df2): 
    for i in range(2): 
        df2[f"student name_{i}"] = pd.Series(map(lambda x: x.split(',')[i], df2["student name"]))
return df2

【讨论】:

    【解决方案3】:

    使用 pandas 功能(str 和 split),您不需要编写函数。

    df = [["John mills, Tim Harry, Alex win, Kate marry"],
          ["Brando XI, James Caan, Richard S. Castellano"],
          ["Heath Ledger,Aaron Eckhart, Michael Caine"]]
    
    df2 = pd.DataFrame(df)
    df2.columns = ['Student_Name']
    
    df2['student name_1'] = df2.Student_Name.str.split(",").str[0]
    df2['student name_2'] = df2.Student_Name.str.split(",").str[1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-26
      • 2015-12-19
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多