我有一个数据帧,df,有一些类型为float64的列,而其他的是对象.由于混合性质,我不能使用
df.fillna('unknown') #getting error "ValueError: could not convert string to float:"
Run Code Online (Sandbox Code Playgroud)
因为错误发生在类型为float64的列上(这是一个误导性错误消息!)
所以我希望我能做点什么
for col in df.columns[<dtype == object>]:
df[col] = df[col].fillna("unknown")
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,是否有任何这样的过滤器表达式,我可以使用df.columns?
我想,不太优雅,我能做到:
for col in df.columns:
if (df[col].dtype == dtype('O')): # for object type
df[col] = df[col].fillna('')
# still puzzled, only empty string works as replacement, 'unknown' would not work for certain value leading to error of "ValueError: Error parsing datetime string "unknown" at position 0"
Run Code Online (Sandbox Code Playgroud)
我也想知道为什么在上面的代码中用''with'unknown'替换代码可以用于某些单元但是失败的单元格中出现"ValueError:Error parsing datetime string",错误"位置0"
非常感谢!
宇
我正在使用django-sentry来跟踪网站中的错误.我的问题是数据库变得太大了.'message'表和'groupsmessage'是相关的
有没有办法清除旧条目和特定消息或将哨兵表添加到django的管理员?
我使用R进行数据分析,对此非常满意.但是,清洁数据可能会更容易一些.我正在考虑学习适合这项任务的另一种语言.具体来说,我正在寻找一种工具,用于获取原始数据,删除不必要的变量或观察,并格式化它以便在R中轻松加载.内容主要是数字和字符串数据,而不是多行文本.
我正在考虑awk/sed组合与Python.(我认识到Perl将是另一种选择,但是,如果我要学习另一种完整语言,Python似乎是一种更好,更可扩展的选择.)
sed/awk的优点是学习起来会更快.缺点是这种组合不像Python那样可扩展.事实上,如果我学习Python,我可能会想象一些"任务蔓延",这很好,但不是我的目标.
我的另一个考虑因素是大数据集的应用程序.据我所知,awk/sed逐行操作,而Python通常会将所有数据都拉入内存.这可能是sed/awk的另一个优势.
我还缺少其他问题吗?您可以提供的任何建议将不胜感激.(我为R用户提供了R标签,以提供他们的清洁建议.)
我试图在dplyr::case_when
内部dplyr::mutate
创建一个新变量,我将一些值设置为缺失并同时重新编码其他值.
但是,如果我尝试将值设置为NA
,则会收到错误消息,指出我们无法创建变量,new
因为NA
s是合乎逻辑的:
mutate_impl(.data,dots)
出错:评估错误:必须是double类型,不是逻辑.
有没有办法NA
使用此方法在数据框中的非逻辑向量中设置值?
library(dplyr)
# Create data
df <- data.frame(old = 1:3)
# Create new variable
df <- df %>% dplyr::mutate(new = dplyr::case_when(old == 1 ~ 5,
old == 2 ~ NA,
TRUE ~ old))
# Desired output
c(5, NA, 3)
Run Code Online (Sandbox Code Playgroud) 在Python中,我有一个类似于以下的pandas DataFrame:
Item | shop1 | shop2 | shop3 | Category
------------------------------------
Shoes| 45 | 50 | 53 | Clothes
TV | 200 | 300 | 250 | Technology
Book | 20 | 17 | 21 | Books
phone| 300 | 350 | 400 | Technology
Run Code Online (Sandbox Code Playgroud)
shop1,shop2和shop3是不同商店中每件商品的成本.现在,我需要在一些数据清理后返回一个DataFrame,如下所示:
Category (index)| size| sum| mean | std
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
其中size是每个Category中的项目数和sum,mean和std与应用于3个商店的相同功能相关.如何使用split-apply-combine模式(groupby,aggregate,apply,...)执行这些操作?
有人可以帮我吗?我对这个疯狂了......谢谢!
我正在处理像这样的pandas DataFrames:
id x
0 1 10
1 1 20
2 2 100
3 2 200
4 1 NaN
5 2 NaN
6 1 300
7 1 NaN
Run Code Online (Sandbox Code Playgroud)
我想用一个具有相同'id'值的行替换每个NAN'x'和之前的非NAN'x':
id x
0 1 10
1 1 20
2 2 100
3 2 200
4 1 20
5 2 200
6 1 300
7 1 300
Run Code Online (Sandbox Code Playgroud)
有没有一些光滑的方法来做到这一点,而无需手动循环行?
我正在对python进行数据清理练习,我正在清理的文本包含我想删除的意大利语单词.我一直在网上搜索我是否可以使用像nltk这样的工具包在Python上执行此操作.
例如给出一些文字:
"Io andiamo to the beach with my amico."
Run Code Online (Sandbox Code Playgroud)
我想留下:
"to the beach with my"
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?任何帮助将非常感激.
列出了加载到pandas数据帧'df2'中的人员的属性.对于清理,我想用np.nan替换零值(0或'0').
df2.dtypes
ID object
Name object
Weight float64
Height float64
BootSize object
SuitSize object
Type object
dtype: object
Run Code Online (Sandbox Code Playgroud)
将值0设置为np.nan的工作代码:
df2.loc[df2['Weight'] == 0,'Weight'] = np.nan
df2.loc[df2['Height'] == 0,'Height'] = np.nan
df2.loc[df2['BootSize'] == '0','BootSize'] = np.nan
df2.loc[df2['SuitSize'] == '0','SuitSize'] = np.nan
Run Code Online (Sandbox Code Playgroud)
相信这可以用类似/更短的方式完成:
df2[["Weight","Height","BootSize","SuitSize"]].astype(str).replace('0',np.nan)
Run Code Online (Sandbox Code Playgroud)
但是上述方法不起作用.零保持在df2.如何解决这个问题?
关于模型的清理方法,我有两个问题.这是我的例子:
class AddProfileForm(ModelForm):
...
password = forms.CharField(max_length=30,widget=forms.PasswordInput(attrs={'class':'form2'}))
password_verify = forms.CharField(max_length=30,widget=forms.PasswordInput(attrs={'class':'form2'}), label='Retype password')
...
class Meta:
model = UserModel
fields=("username", "password", "password_verify", "first_name", "last_name", "date_of_birth", "biography", "contacts", )
#called on validation of the form
def clean(self):
#run the standard clean method first
cleaned_data=super(AddProfileForm, self).clean()
password = cleaned_data.get("password")
password_verify = cleaned_data.get("password_verify")
#check if passwords are entered and match
if password and password_verify and password==password_verify:
print "pwd ok"
else:
raise forms.ValidationError("Passwords do not match!")
#always return the cleaned data
return cleaned_data
Run Code Online (Sandbox Code Playgroud)
我应该一直打电话给标准清洁方法吗?
cleaned_data=super(AddProfileForm, …
Run Code Online (Sandbox Code Playgroud)pandas factorize
函数将一系列中的每个唯一值分配给基于0的顺序索引,并计算每个系列条目所属的索引.
我想pandas.factorize
在多列上完成相同的操作:
import pandas as pd
df = pd.DataFrame({'x': [1, 1, 2, 2, 1, 1], 'y':[1, 2, 2, 2, 2, 1]})
pd.factorize(df)[0] # would like [0, 1, 2, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)
也就是说,我想确定数据帧的几列中每个唯一值的元组,为每个列分配一个顺序索引,并计算数据帧中每一行所属的索引.
Factorize
仅适用于单列.pandas中有多列等效函数吗?
data-cleaning ×10
python ×7
pandas ×5
dataframe ×3
django ×2
r ×2
awk ×1
data-science ×1
dplyr ×1
enumeration ×1
missing-data ×1
modelform ×1
nan ×1
overriding ×1
pivot ×1
sed ×1
sentry ×1