我目前正在尝试将我的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
非常感谢您的帮助!真的很感激:)
答案 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)