当列类型为object时,根据int或string分隔行

2024-09-26 22:54:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,其中一列包含一些行的整数和其他行的字符串。 列类型为对象

例如:

Index     Column of interest
1         21678849
2         37464859
3         barbara
4         28394821
5         francis

我无法使用.astype('str')强制该列更改类型。我无法使用.isstring、.isdigit或.isinstance。 我试过看solutions for converting on objects to string,但这些似乎不起作用

我也试过:

[True if x.isin([1,2,3,4,5,6,7,8,9,0]) else False for x in df['column_of_interest']]

但这给了我:AttributeError:'str'对象没有属性'isin'

有人对我如何处理这件事有其他想法吗

理想情况下,我希望创建第三列,对行是int还是str进行分类


Tags: of数据对象字符串类型forindexcolumn
3条回答

好的,这是有效的,我测试了它:

import pandas as pd

#----------------------------------------
# Prepare the data in df.
#----------------------------------------

from io import StringIO

TESTDATA = StringIO("""Index;column_of_interest
1;21678849
2;37464859
3;barbara
4;28394821
5;francis""")

df = pd.read_csv(TESTDATA, sep=";")

#----------------------------------------
# The actual code to solve the problem.
#----------------------------------------

def is_integer(x):
    try:
        int(x)
        return True
    except ValueError:
        return False

print([is_integer(x) for x in df['column_of_interest']])

输出为

[True, True, False, True, False]

当然,有些代码不适用于您,但我想要一个完整的工作示例,我(和其他人)可以实际测试。我想你可以从中挑选出你需要的东西

测试整数的代码取自https://stackoverflow.com/a/1267145/1629102

最后是将数据添加为新列的代码:

import pandas as pd

#----------------------------------------
# Prepare the data in df.
#----------------------------------------

from io import StringIO

TESTDATA = StringIO("""Index;column_of_interest
1;21678849
2;37464859
3;barbara
4;28394821
5;francis""")

df = pd.read_csv(TESTDATA, sep=";")

#----------------------------------------
# The actual code to solve the problem.
#----------------------------------------

def is_integer(x):
    try:
        int(x)
        return True
    except ValueError:
        return False

is_integer_list = [is_integer(x) for x in df['column_of_interest']]

df["Is_integer"] = is_integer_list

print(df)

使用此输出:

   Index column_of_interest  Is_integer
0      1           21678849        True
1      2           37464859        True
2      3            barbara       False
3      4           28394821        True
4      5            francis       False

您可以试试isinstance

[isinstance(x, int) for x in df['column_of_interest']]

试试这个-

[True if x in [1,2,3,4,5,6,7,8,9,0] else False for x in df['column_of_interest']]

相关问题 更多 >

    热门问题