标签: data-cleaning

查找类型为float或特定类型的Pandas中的所有数据框列?

我有一个数据帧,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"

非常感谢!

python dataframe pandas data-cleaning

42
推荐指数
3
解决办法
4万
查看次数

如何清除/维护django-sentry数据库?

我正在使用django-sentry来跟踪网站中的错误.我的问题是数据库变得太大了.'message'表和'groupsmessage'是相关的

有没有办法清除旧条目和特定消息或将哨兵表添加到django的管理员?

django sentry data-cleaning

29
推荐指数
3
解决办法
8406
查看次数

用于清理数据的Python或awk/sed

我使用R进行数据分析,对此非常满意.但是,清洁数据可能会更容易一些.我正在考虑学习适合这项任务的另一种语言.具体来说,我正在寻找一种工具,用于获取原始数据,删除不必要的变量或观察,并格式化它以便在R中轻松加载.内容主要是数字和字符串数据,而不是多行文本.

我正在考虑awk/sed组合与Python.(我认识到Perl将是另一种选择,但是,如果我要学习另一种完整语言,Python似乎是一种更好,更可扩展的选择.)

sed/awk的优点是学习起来会更快.缺点是这种组合不像Python那样可扩展.事实上,如果我学习Python,我可能会想象一些"任务蔓延",这很好,但不是我的目标.

我的另一个考虑因素是大数据集的应用程序.据我所知,awk/sed逐行操作,而Python通常会将所有数据都拉入内存.这可能是sed/awk的另一个优势.

我还缺少其他问题吗?您可以提供的任何建议将不胜感激.(我为R用户提供了R标签,以提供他们的清洁建议.)

python awk r sed data-cleaning

26
推荐指数
3
解决办法
4134
查看次数

避免与dplyr :: case_when的类型冲突

我试图在dplyr::case_when内部dplyr::mutate创建一个新变量,我将一些值设置为缺失并同时重新编码其他值.

但是,如果我尝试将值设置为NA,则会收到错误消息,指出我们无法创建变量,new因为NAs是合乎逻辑的:

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)

r dplyr data-cleaning

24
推荐指数
2
解决办法
1万
查看次数

Python pandas groupby聚合在多个列上,然后是pivot

在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,...)执行这些操作?

有人可以帮我吗?我对这个疯狂了......谢谢!

python pivot dataframe pandas data-cleaning

23
推荐指数
2
解决办法
5万
查看次数

使用以前的非缺失值填写缺失的pandas数据,按键分组

我正在处理像这样的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 nan missing-data pandas data-cleaning

16
推荐指数
1
解决办法
9396
查看次数

使用Python从文本中删除非英语单词

我正在对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)

有谁知道如何做到这一点?任何帮助将非常感激.

python data-cleaning data-science

14
推荐指数
2
解决办法
2万
查看次数

Python Pandas将多个列替换为零到Nan

列出了加载到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.如何解决这个问题?

python dataframe pandas data-cleaning

14
推荐指数
3
解决办法
3万
查看次数

modelform:覆盖clean方法

关于模型的清理方法,我有两个问题.这是我的例子:

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)
  1. 我应该一直打电话给标准清洁方法吗?

    cleaned_data=super(AddProfileForm, …
    Run Code Online (Sandbox Code Playgroud)

django overriding modelform data-cleaning

13
推荐指数
1
解决办法
2万
查看次数

熊猫中的多列分解

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中有多列等效函数吗?

python enumeration pandas data-cleaning

12
推荐指数
1
解决办法
5620
查看次数