在Python中删除数据框中的空格

11

我的代码出现错误,因为我试图通过调用csv文件中的元素来创建一个数据框。我从文件中调用了两列:CompanyName和QualityIssue。QualityIssue有三种类型:设备质量、用户以及无法确定。我尝试创建一个名为df.Equipment Quality的数据框,但显然这不起作用,因为那里有一个空格。我想从原始文件中获取Equipment Quality并将空格替换为下划线。

output:

我的代码出现错误,因为我试图通过调用csv文件中的元素来创建一个数据框。我从文件中调用了两列:CompanyName和QualityIssue。QualityIssue有三种类型:设备质量、用户以及无法确定。我尝试创建一个名为df.Equipment Quality的数据框,但显然这不起作用,因为那里有一个空格。我想从原始文件中获取Equipment Quality并将空格替换为下划线。

Top Calling Customers,         Equipment Quality,    User,    Neither,
Customer 3,                      2,           2,        0,
Customer 1,                      0,           2,        1,
Customer 2,                      0,           1,        0,
Customer 4,                      0,           1,        0,

这是我的代码:

import numpy as np
import pandas as pd
import pandas.util.testing as tm; tm.N = 3

# Get the data.
data = pd.DataFrame.from_csv('MYDATA.csv')   
# Group the data by calling CompanyName and QualityIssue columns.
byqualityissue = data.groupby(["CompanyName", "QualityIssue"]).size() 
# Make a pandas dataframe of the grouped data.
df = pd.DataFrame(byqualityissue) 
# Change the formatting of the data to match what I want SpiderPlot to read.
formatted = df.unstack(level=-1)[0]  
# Replace NaN values with zero.
formatted[np.isnan(formatted)] = 0 
includingtotals = pd.concat([formatted,pd.DataFrame(formatted.sum(axis=1), 
                             columns=['Total'])], axis=1)
sortedtotal = includingtotals.sort_index(by=['Total'], ascending=[False])
sortedtotal.to_csv('byqualityissue.csv')

这似乎是一个经常被问到的问题,我尝试了很多解决方案,但它们似乎都没有起作用。以下是我尝试过的:

with open('byqualityissue.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
    return [[x.strip() for x in row] for row in reader]
    sentence.replace(" ", "_")

sortedtotal['QualityIssue'] = sortedtotal['QualityIssue'].map(lambda x: x.rstrip(' ')) 

而我认为最有希望的是从这里开始 http://pandas.pydata.org/pandas-docs/stable/text.html:

formatted.columns = formatted.columns.str.strip().str.replace(' ', '_')

但是我遇到了这个错误:AttributeError: 'Index' object has no attribute 'str'

提前感谢您的帮助!


3
你可以使用df.columns = pd.Series(df.columns).str.replace(' ','_')来替换数据框列名中的空格,不过我想问一下为什么你不直接使用df['Equipment Quality']来访问该列,这样会始终有效,而不是试图将其作为属性来访问,这种方法是无效的? - EdChum
@EdChum 是的!谢谢你提供的提示,因为我猜那应该是真正的问题,而不是绕过它。我不确定语法,但那个方法效果更好。 - jenryb
虽然这是一个较旧的问题,但是对于 从 Pandas 中的列中删除空格 的答案,这个回答 更适用于 Pandas,并且有更多的浏览量/投票。 - Trenton McKinney
2个回答

11

尝试:

formatted.columns = [x.strip().replace(' ', '_') for x in formatted.columns]

3

我理解您的问题,以下内容应该可以解决问题(如果您想要小心起见,可以先测试inplace=False看看效果):

sortedtotal.rename(columns=lambda x: x.replace(" ", "_"), inplace=True)

如果您在列名周围有空格,例如:"This example "

那么您需要使用反引号将列名括起来,例如:`This example`

sortedtotal.rename(columns=lambda x: x.strip().replace(" ", "_"), inplace=True)

这个功能会去除前后空格,然后将内部的空格转换为“_”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接