熊猫将列拆分为str和int列

时间:2020-06-29 09:05:43

标签: python pandas dataframe

我目前正在尝试将我的pandas数据框中的一列分为两列,其中一列为int,另一列为字符串。我知道,为了能够将一列分为两列,可以使用以下代码(其中A是要分为整数和字符串的列):

df[['integer','string']] = df['A'].str.split(" ",expand=True,)

但是,我的数据集存在的问题是,整数和字符串之间没有空格或“-”作为将列拆分的指标。我的数据框的示例如下:

A     B 
3     abc
629S  def
84S   ghi  
S72   jkl

正如所见,并非所有行都具有字母,并且int不一定必须在字母之前。 我的预期输出如下:

integer      string      B
3            NaN         abc
629          S           def
84           S           ghi
72           S           jkl

非常感谢您的帮助!真的很感激:)

2 个答案:

答案 0 :(得分:2)

IIUC,您需要str.extract,用例看起来很简单,因此我们可以利用\D+\d+

D+ matches any character that's not a digit (equal to [^0-9])

\d+ matches a digit (equal to [0-9])

df['String'] = df['A'].str.extract('(\D+)') 

df['A'] = df['A'].str.extract('(\d+)').astype(int)

print(df.rename(columns={'A' : 'Integer'}))


   Integer    B String
0        3  abc    NaN
1      629  def      S
2       84  ghi      S
3       72  jkl      S

print(df.dtypes)

Integer     int32
B          object
String     object
dtype: object

如果您的栏中有NaN

d = """A     B 
3     abc
629S  def
84S   ghi  
Sss   jkl"""

from io import StringIO

df = pd.read_csv(StringIO(d),sep='\s+')

df['A'] = df['A'].str.extract('(\d+)').astype(float)

print(df)

       A    B
0    3.0  abc
1  629.0  def
2   84.0  ghi
3    NaN  jkl

df['A'] = pd.to_numeric(df['A'].str.extract('(\d+)')[0],errors='coerce')
print(df)

       A    B
0    3.0  abc
1  629.0  def
2   84.0  ghi
3    NaN  jkl

答案 1 :(得分:1)

使用Series.str.extractSeries.str.replace

Base64UrlEncoder

Microsoft.IdentityModel.Tokens