官方示例:
read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
常用参数实例:
import pandas as pd
df = pd.read_csv('file_name.csv',encoding='utf-8',sep=' ',engine='python')
encoding:编码方式
sep:指定分隔符
engine:选择读取的引擎目前来说C更快,但是Python的引擎有更多选择的操作
在批量处理csv文件时,当需要对某一列的数值进行迭代打印输出时:
方法一:
import pandas as pd
df = pd.read_csv('file_name.csv',encoding='utf-8',sep=',',engine='python')
for i in df.index:
row = df.loc[i]
data = row['列名']
print(data)
方法二:
import pandas as pd
df = pd.read_csv('file_name.csv',encoding='utf-8',sep=',',engine='python')
for column, row in data.iterrows():
data = row['列名']
print(data)
官方示例:
DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None,
header=True, index=True, index_label=None, mode='w', encoding=None, compression=None,
quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=None,
date_format=None, doublequote=True, escapechar=None, decimal='.')
代码实例:
#coding:utf-8
import pandas as pd
import numpy as np
a = [1,2,3]
b = [4,5,6]
c = [8,7,9]
dict = {"表头1":a,"表头2":b,"表头3":c}
df = pd.DataFrame (dict, columns = ["表头1","表头2","表头3"])
df.to_csv("testfoo.csv",encoding = "utf-8",sep=',')
"""
结果:
表头1 表头2 表头3
0 1 4 8
1 2 5 7
2 3 6 9
"""
Pandas-DataFrame基础知识点总结
- DataFrame是一种表格型数据结构,它含有一组有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,它可以看作是由Series组成的字典,不过这些Series公用一个索引。
DataFrame的创建有多种方式,不过最重要的还是根据dict进行创建,以及读取csv或者txt文件来创建。这里主要介绍这两种方式。
pandas中的DataFrame可以使用一下构造函数创建
pandas.DataFrame( data,index,columns,dtype,copy)
构造函数的参数如下:
编号 | 参数 | 描述 |
---|---|---|
1 | data | 数据采取各种形式,如:ndarray,series,map,lists,dict,constant和另一个DataFrame。 |
2 | index | 对于行标签,要用于结果帧的索引是可选缺省值np.arrange(n),如果没有传递索引值。 |
3 | columns | 对于列标签,可选的默认语法是 - np.arange(n)。 这只有在没有索引传递的情况下才是这样。 |
4 | dtype | 每列的数据类型。 |
5 | copy | 如果默认值为False,则此命令(或任何它)用于复制数据。 |
Pandas数据帧(DataFrame)可以使用各种输入创建,如 -
列表字典系列Numpy ndarrays另一个数据帧(DataFrame)
代码示例:
import pandas as pd
df = pd.DataFrame()
print(df)
"""
结果:
Empty DataFrame
Columns: []
Index: []
"""
一般在创建DataFrame之后,将数据用to_csv方法进行写入到csv文件中进行存储。
1.concat用法
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False)
数据处理过程分析:
- EnName(19.3.5)(test).csv文件中包含EnName,MoviesName,Plot 项
- Chinese_EnName(19.3.13).csv文件中包含EnName,MoviesName,Chinese_Plot 项
代码示例:
import pandas as pd
#读取csv文件获取操作对象
#
df1 = pd.read_csv('EnName(19.3.5)(test).csv',encoding='utf-8',sep=',',engine='python')
df2 = pd.read_csv('Chinese_EnName(19.3.13).csv',encoding='utf-8',sep=',',engine='python')
#合并df1,df2文件,以列合并,取他们的并集
res = pd.concat([df1, df2], axis=1, join='outer')
print(res)
运行结果如图所示:
这个时候我们发现csv数据在合并的时候,有重复项,这个时候需要我们去删除其中的重复列数据,需要用到drop方法
首先将重复项其中的一列更改列名来方便删除,将其中的EnName更改为C_EnName,MoviesName更改为C_MoviesName。然后进行drop操作
import pandas as pd
#定义资料集
df1 = pd.read_csv('EnName(19.3.5)(test).csv',encoding='utf-8',sep=',',engine='python')
df2 = pd.read_csv('Chinese_EnName(19.3.13).csv',encoding='utf-8',sep=',',engine='python')
df = pd.read_csv('1234.csv',encoding='utf-8',sep=',')
drop = df.drop(['C_EnName','C_MoviesName'],axis=1)
save = pd.DataFrame(drop)
save.to_csv('1234.csv',encoding='utf-8',sep=',',index=False)
#print(res)
运行结果如图所示:
可以看出数据成功进行处理,该方法适用于不考虑索引(index),并且有几列数据为重复项,则可直接进行数据处理
ps:还需要注意的点是,在concat操作或者drop操作后,通过to_csv方法保存到新文件中,会同时写入index索引值,如若不需要则需要加上参数:index = False 即可
我们得到一份数据,首先我们得判断它是否具有重复项,所以我们得使用到duplicated方法来判断,如果有的情况下我们再进一步进行去重工作,在处理csv数据时,这个时候我们需要用到drop_duplicates()函数来操作文件进行去除重复项。
1. 判断是否具有重复项
a = df.duplicated()
a返回的是布尔值,对每一项是否第第一次出现进行判断,第一次出现输出值为False,重复项出现则输出True。
这个drop_duplicate方法是对DataFrame格式的数据,去除特定列下面的重复行。返回DataFrame格式的数据。
例如,data.csv如下所示:
EnName,Gender
Peter,male
Peter,female
Cris,male
Mary,female
Pink,female
Peter,male
Pink,female
我们需要去除EnName和Gender项同时重复的数据,可以看出Peter,male项和Pink,female项为重复项,代码如下所示:
import pandas as pd
df = pd.read_csv('data.csv',encoding='utf-8',sep=',',engine='python')
df.drop_duplicates(['EnName','Gender'],'first',inplace=True)
print(df)
执行代码,结果如下图所示:
重复项已被处理,如若我们需要去除单列重复的该项数据,例如EnName为Peter的数据项有多个,则代码如下所示:
import pandas as pd
df = pd.read_csv('data.csv',encoding='utf-8',sep=',',engine='python')
df.drop_duplicates(['EnName'],'first',inplace=True)
print(df)
pandas中有三种索引方法:.loc,.iloc和[],注意:.ix的用法在0.20.0中已经不建议使用了!
编号 | 索引 | 描述 |
---|---|---|
1 | .loc() | 基于标签 |
2 | .iloc() | 基于整数 |
3 | .ix() | 基于标签和整数 |
一维
df = pd.read_csv('data.csv',encoding='utf-8',sep=',',engine='python')
df[:3]
取该csv文件中index为[0:3]的行数
df = pd.read_csv('data.csv',encoding='utf-8',sep=',',engine='python')
df['EnName']
取该csv文件中列名为EnName项
二维,先行后列
.loc主要是基于标签(label)的,包括行标签(index)和列标签(columns),即行名称和列名称,可以使用df.loc[index_name,col_name],选择指定位置的数据,其它的用法有:
df.loc[:,'EnName']