Python函数在shell中工作,而不是在scrip中

2024-09-30 16:39:40 发布

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

我有一个pandas dataframe,在这个dataframe中,我试图对一列字符串值运行一些操作,其中包括一些被解释为float('nan')的缺失数据,相当于:

df = pd.DataFrame({'otherData':[1,2,3,4],'stringColumn':[float('nan'),'Random string one... ','another string..  ','a third string    ']})


DataFrame内容:

otherData    stringColumn
1            nan
2            'Random string one... '
3            'another string..  '
4            ' a third string    '

我想清除各种尾部省略号和空格的stringColumn数据,并为nan值填充空字符串,即''。你知道吗

为此,我使用的代码相当于:

df['stringColumn'] = df['stringColumn'].fillna('')
df['stringColumn'] = df['stringColumn'].str.strip()
df['stringColumn'] = df['stringColumn'].str.strip('...')
df['stringColumn'] = df['stringColumn'].str.strip('..')

我遇到的问题是,当我在我编写的脚本中运行此代码时,它不起作用。在我的'stringColumn'列中仍然有nan个值,并且仍然有一些省略号,但不是全部。没有警告消息。但是,当我在pythonshell中运行完全相同的代码时,它可以工作,为nan输入'',并根据需要进行清理。我试过在IDLE 3.5.0和Spyder 3.2.4中运行它,结果是一样的。你知道吗


Tags: 数据字符串代码dataframedfstringrandomnan
2条回答

这对我在pandasv0.20.2上的工作很好,因此您可能需要尝试升级

pip install  upgrade pandas

首先调用str.strip,您可以在onestr.replace调用中执行此操作。你知道吗

df.stringColumn = df.stringColumn.fillna('')\
        .str.strip().str.replace(r'((?<=^)\.+)|(\.+(?=$))', '')

0                     
1    Random string one
2       another string
3       a third string
Name: stringColumn, dtype: object

如果nan不是NaN类型,而是字符串,只需修改regex:

((?<=^)\.+)|(\.+(?=$))|nan

正则表达式详细信息

(
(?<=^)    # lookbehind for start of sentence
\.+       # one or more '.'
)
|         # regex OR
(
\.+       # one or more '.'
(?=$)     # lookahead for end of sentence
)

正则表达式查找前导点或尾随点(一个或多个)并删除它们。你知道吗

您的代码对我来说也适用于pandas==0.20.1。你知道吗

您也可以将其作为一个无正则表达式的单行程序来执行。strip()方法支持从字符串两端删除的chars字符参数。你知道吗

df['stringColumn'] = df['stringColumn'].fillna('').str.strip('. ')

strip()的Docstring:

S.strip([chars]) -> str

Return a copy of the string S with leading and trailing
whitespace removed.
If chars is given and not None, remove characters in chars instead.

相关问题 更多 >