我创建了一个函数来清理数据框中字符串中的任何HTML代码/标记。该函数从数据框中获取每个值,使用remove_html函数清除它,并返回一个干净的df。在将数据帧转换为字符串值并清理它之后,我试图在可能的情况下将数据帧中的值转换回整数。我试过尝试/除了但没有得到我想要的结果。这就是我现在所拥有的:
def clean_df(df):
df = df.astype(str)
list_of_columns = list(df.columns)
for col in list_of_columns:
column = []
for row in list(df[col]):
column.append(remove_html(row))
try:
return int(row)
except ValueError:
pass
del df[col]
df[col] = column
return df
如果没有try / except语句,函数将返回一个干净的df,其中整数是字符串。所以它只是一个似乎是一个问题的try / except语句。我以多种方式尝试了try / except语句,但没有一个返回df。例如,当前代码返回一个'int'对象。
答案 0 :(得分:2)
将columm.append
插入try:
for col in list_of_columns:
column = []
for row in list(df[col]):
try:
column.append(remove_html(row))
except ValueError:
pass
del df[col]
df[col] = column
return df
答案 1 :(得分:0)
考虑pd.DataFrame
df
df = pd.DataFrame(dict(A=[1, '2', '_', '4']))
您想使用函数pd.to_numeric
...
的 注意 强>
pd.to_numeric
针对标量和pd.Series
进行操作。它不在pd.DataFrame
上运行
的 另外 强>
使用参数errors='coerce'
可以获取尽可能多的数字,并NaN
获取其他数据。
pd.to_numeric(df['A'], 'coerce')
0 1.0
1 2.0
2 NaN
3 4.0
Name: A, dtype: float6
或者,为了获得尽可能多的数字,以及你在其他地方已有的数据
pd.to_numeric(df['A'], 'coerce').combine_first(df['A'])
0 1
1 2
2 _
3 4
Name: A, dtype: object
然后您可以将其分配回df
df['A'] = pd.to_numeric(df['A'], 'coerce').combine_first(df['A'])
答案 2 :(得分:0)
像这样工作:
def clean_df(df):
df = df.astype(str)
list_of_columns = list(df.columns)
for col in list_of_columns:
column = []
for row in list(df[col]):
try:
column.append(int(remove_html(row)))
except ValueError:
column.append(remove_html(row))
del df[col]
df[col] = column
return df
答案 3 :(得分:0)
在函数中使用try / except,并将该函数与DataFrame.applymap()
df = pd.DataFrame([['a','b','1'],
['2','c','d'],
['e','3','f']])
def foo(thing):
try:
return int(thing)
except ValueError as e:
return thing
>>> df[0][2]
'e'
>>> df[0][1]
'2'
>>> df = df.applymap(foo)
>>> df[0][2]
'e'
>>> df[0][1]
2
>>>