dea*_*ode 32 python dataframe pandas
我正在将CSV文件读入DataFrame.我需要从所有类似字符串的单元格中删除空格,而在Python 2.7中保留其他单元格不变.
这是我正在做的事情:
def remove_whitespace( x ):
if isinstance( x, basestring ):
return x.strip()
else:
return x
my_data = my_data.applymap( remove_whitespace )
Run Code Online (Sandbox Code Playgroud)
Pandas有没有比这更好或更惯用的方法呢?
是否有更有效的方式(也许是通过列方式做事)?
我试过寻找一个明确的答案,但是关于这个主题的大多数问题似乎是如何从列名本身中去除空格,或者假设单元格都是字符串.
Ada*_*zyk 51
在寻找我可以使用的快速简约的代码片段时偶然发现了这个问题.不得不从上面的帖子中自己组装一个.也许有人会发现它很有用:
data_frame_trimmed = data_frame.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
Run Code Online (Sandbox Code Playgroud)
jak*_*vdp 34
您可以使用pandas的Series.str.strip()
方法为每个类似字符串的列快速执行此操作:
>>> data = pd.DataFrame({'values': [' ABC ', ' DEF', ' GHI ']})
>>> data
values
0 ABC
1 DEF
2 GHI
>>> data['values'].str.strip()
0 ABC
1 DEF
2 GHI
Name: values, dtype: object
Run Code Online (Sandbox Code Playgroud)
Mic*_*ein 13
我们想:
将我们的函数应用于数据帧中的每个元素 - 使用applymap
。
使用type(x)==str
(与x.dtype == 'object'
),因为 Pandas 会将列标记为object
混合数据类型的object
列(一列可能包含int
和/或str
)。
str
然后去除空格)。因此,我发现以下是最简单的:
df.applymap(lambda x: x.strip() if type(x)==str else x)
调用时pandas.read_csv
,可以使用匹配零个或多个空格,后跟逗号,零个或多个空格的正则表达式作为分隔符。
例如,这里是"data.csv"
:
In [19]: !cat data.csv
1.5, aaa, bbb , ddd , 10 , XXX
2.5, eee, fff , ggg, 20 , YYY
Run Code Online (Sandbox Code Playgroud)
(第一行以三个空格结束XXX
,第二行以最后一个空格结束Y
。)
以下使用pandas.read_csv()
正则表达式' *, *'
作为分隔符来读取文件。(使用正则表达式作为分隔符仅在的“ python”引擎中可用read_csv()
。)
In [20]: import pandas as pd
In [21]: df = pd.read_csv('data.csv', header=None, delimiter=' *, *', engine='python')
In [22]: df
Out[22]:
0 1 2 3 4 5
0 1.5 aaa bbb ddd 10 XXX
1 2.5 eee fff ggg 20 YYY
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
57684 次 |
最近记录: |