pandas查漏知识点

关于将pandas数据写入mysql中:重新认识to_sql函数

方法函数

def to_sql(self, name, con, schema=None, if_exists='fail', index=True,
           index_label=None, chunksize=None, dtype=None, method=None):
  • 参数:
    name(必填): 指定的是将输入接入数据库当做的哪个表。
    con(必填):与数据库链接的方式,推荐使用sqlalchemy的engine类型;
    schema: string,optional;相应数据库的引擎,不设置则使用数据库的默认引擎,如mysql中的innodb引擎
    if_exists: {‘fail’,‘replace’,‘append’},默认’fail’;当数据库中已经存在数据表时对数据表的操作,有replace替换、append追加,fail则当表存在时提示ValueError。
    index:布尔值,默认为True;对DataFrame的index索引的处理,为True时索引也将作为数据写入数据表。
    index_label:字符串或序列,默认为None;当上一个参数index为True时,设置写入数据表时index的列名称。
    chunsize:int,可选;设置整数,如20000,一次写入数据时的数据行数量,当数据量很大时,需要设置,否则会链接超时写入失败。
    dtype:dict,可选;写入数据表时,可以设置列的名称(The keys should be the column
  • 注意:
    在将数据存入mysql中时,理论上说在mysql中的数据应该是有主键的,因此在index参数默认应该为true。但是,需要注意,当index选择了true,即在数据库中存在以index为主键的列了,再次从mysql读取数据时,在利用duplicated判断重复数据时,需要剔除index列进行判断。

关于ps.read_sql()返回值

在连接sql后,读取数据后,对返回值进行处理时,想获取数值,但是始终不对。经过仔细查看,自己忘记了ps.read_sql()和sql.read_csv()函数返回值类型是pandas.core.frame.DataFrame类型的了。
可以直接利用该类型的特性,columns和values方法进行取。

print(undeal_rate.columns.values[0])
print(undeal_rate[undeal_rate.columns.values[0]].values[0])

关于pandas.DataFrame.drop_duplicates

  • 方法函数
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)

参数
subset: 列名,可选,默认为None;
keep: {‘first’, ‘last’, False}, 默认值 ‘first’。first: 保留第一次出现的重复行,删除后面的重复行。last: 删除重复项,除了最后一次出现。
False: 删除所有重复项。
inplace:布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。(inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。)

  • 实例
# 去除完全重复行数据
data.drop_duplicates(inplace=True)

# 去除某几列
data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)

关于pandas.DataFrame.reset_index

  • 方法函数
DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')

参数
level:数值类型可以为:int、str、tuple或list,默认无,仅从索引中删除给定级别。默认情况下移除所有级别。控制了具体要还原的那个等级的索引 。
drop:默认为False。当指定drop=False时,在获得新的index,原来的index变成数据列,保留在数据框中,不想保留原来的index的话可以使用参数drop=True,默认False。
inplace:输入布尔值,表示当前操作是否对原数据生效,默认为False。
col_level:数值类型为int或str,默认值为0,如果列有多个级别,则确定将标签插入到哪个级别。默认情况下,它将插入到第一级。
col_fill:对象,默认‘’,如果列有多个级别,则确定其他级别的命名方式。如果没有,则重复索引名。

pandas.DataFrame.sort_values

  • 方法函数
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)[source]

参数:
by:str 或 str的list; 要排序的名称或名称列表。如果axis是0或’index’,那么by可能包含索引级别and/or列标签。如果axis是1或’columns’,那么by可能包含列级别and/or索引标签。
允许指定索引或列级名称。
axis :{0 或‘index’, 1 或‘columns’}, 默认为 0,要排序的轴(axis)。
ascending :bool 或 bools的list, 默认为 True。升序和降序排序。指定多个排序顺序的列表。如果这是一个布尔的list,必须匹配的长度的by。
inplace :bool, 默认为 False。如果为True,就地执行操作。
kind :{‘quicksort’, ‘mergesort’, ‘heapsort’}, 默认为 ‘quicksort’选择排序算法。mergesort是唯一稳定的算法。对于DataFrames,仅在对单个列或标签进行排序时才应用此选项。
na_position :{‘first’, ‘last’}, 默认为 ‘last’,如果首先将NaN放在开头; 最后将NaN放在最后。
ignore_index :bool, 默认为 False。如果为True,则结果轴将标记为0、1,…,n-1。
key:callable, 可选的在排序之前,将键函数应用于这些值。这类似于内建函数中的key参数sorted(),但值得注意的区别是此key函数应被向量化。它应该期望Series并返回与输入形状相同的Series。它将应用于by独立的每一列。

  • 实例
>>> df.sort_values(by='col1', ascending=False)
  col1  col2  col3 col4
4    D     7     2    e
5    C     4     3    F
2    B     9     9    c
0    A     2     0    a
1    A     1     1    B
3  NaN     8     4    D

同理可以看pandas.DataFrame.sort_index

重新认识replace函数

在对数据进行清洗的时候,我遇到了需要替换其他的一些信息。发现,有好几个replace,这里对replace重新认识一下。

字符串中的replace

方法

str.replace(old, new[, max])

其中:
old – 将被替换的子字符串
new – 新字符串,用于替换old子字符串
max – 可选字符串, 替换不超过 max 次
说明
该方法针对字符串而言的。返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。
实例

#!/usr/bin/python

str = "this is string example....wow!!! this is really string";
print str.replace("is", "was");
print str.replace("is", "was", 3);

注意

  1. 该replace 不会改变原 string 的内容。
  2. 该replace一次只能替换一次值,若需多次替换则需要使用如下形式
str.replace(old1, new1).replace(old2, new2)

参考Python replace()方法

pandas中的replace

pandas数据两大类型,series和dataframe。如果要替换里面元素的值,则需要对该类型使用replace。
说明

  1. 该raplace是针对pandas特有的数据结构而言,而不是针对字符串而言。
  2. 该replace替换的是series或者dataframe中的元素值,而不是元素中的字符值。
  3. 该方法使用后,不会修改之前数据中的元素值。
    方法
# 将某一个元素替换成另一个元素
data.replace(old, new)

# 多个元素替换成同一个值, 利用列表
data.replace([old1, old2, ...], new)

# 多个元素替换成不同的值
## 法1:利用字典
data.replace({old1:new1}, {old2, news},...)
## 法2: 利用列表
data.replace([old1, old2], [new1, new2], ...)

# 对指定目标列进行替换成相同值
data.replace({列名1:[old1, old2, ...]}, {列名2: [old3, old4,...]}, new)

# 对指定目标列进行替换成不同值
data.replace({列名1:{old1: new1, old2: new2, ...}, {列名2: {old3: new3, ...}}})

参考24_Pandas.DataFrame,Series元素值的替换(replace)

pandas中str.replace

说明
在pandas中可能要对元素中的一些字符元素进行批量处理,理论上来讲,可以通过将pandas数据类型转为str类型,然后利用python标准库中的replace等函数进行处理;但是这样处理方法比较冗杂。
在pandas中准备了处理字符串的方法,以便处理series和dataframe中的特定字符元素。
预备的方法

  • 替换
    str.replace():替换字符串
  • 空白削除
    str.strip():删除左右两侧的空白(开始/结束)
    str.lstrip():删除左侧空白
    str.rstrip():删除右侧空白
  • 大小写変换
    str.lower():转换为小写
    str.upper():转换为大写
    str.capitalize():将第一个字母转换为大写,将其他字母转换为小写
    str.title():将单词的首字母转换为大写,其余转换为小写
    方法
Series.str.replace(pat, repl, n=- 1, case=None, flags=0, regex=None)

其中,
pat:str 或 compiled regex
字符串可以是字符序列或正则表达式。
repl:str 或 callable
替换字符串或可调用字符串。可调用对象被传递给正则表达式匹配对象,并且必须返回要使用的替换字符串。参考re.sub()。
n:int, 默认为 -1 (all)
从一开始要进行的更换次数。
case:bool, 默认为 None
确定替换是否区分大小写:
如果为True,则区分大小写(默认为pat是一个字符串)
设置为False表示不区分大小写
如果无法设置pat是已编译的正则表达式。
flags:int, 默认为 0 (no flags)
正则表达式模块标志,例如重新IGNORECASE。如果无法设置pat是已编译的正则表达式。
regex:bool, 默认为 True
确定是否假设passed-in模式是正则表达式:
如果为True,则假定passed-in模式为正则表达式。
如果为False,则将模式视为文字字符串
如果无法设置为Falsepat是已编译的正则表达式或repl是可调用的。
注意
如果需要将多个子字符串替换为同一个值,可以使用:

data.str.replace('old1|old2|old3...',new)

比如:

data2 = str(data['address']).str.replace('自治区|省|回族|维吾尔|壮族','')

关于pandas中的数据类型

整个pandas数据类型是series(一维数组类型)或者dataframe(多维数组类型)类型。
data.columns为pandas.core.indexes.base.Index类型。
data[类名]的数据类型是series类型,即一维数组类型。
data[类型].values为numpy.ndarray。
在pyecharts画图时,传入的参数应该是list类型,因此在取datafame数据时,需要进行list转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值