Pandas笔记1-导入csv文件

1 本文适合读者

刚开始学习Pandas的新手

2 环境

Python 3.7.0
Pandas 0.23.4
NumPy 1.15.2

import numpy as np
import pandas as pd

3 测试文件

这是一个常见的水果销量表,每个月每种水果的单价、数量、和销售金额
用逗号分隔开的内容粘贴到文本文件 a.csv:

月份,水果,数量,单价,金额
201801,苹果,65,2.3,149.50
201802,苹果,101,2.3,232.30
201803,苹果,113,2.5,282.50
201804,苹果,145,2.5,362.50
201805,苹果,145,2.5,362.50
201806,苹果,167,2.8,467.60
201807,苹果,203,2.8,568.40
201808,苹果,255,2.9,739.50
201801,香蕉,180,3.5,630.00
201802,香蕉,201,3.5,703.50
201803,香蕉,223,3.5,780.50
201804,香蕉,254,3.9,990.60
201805,香蕉,267,3.9,1041.30
201806,香蕉,213,4.4,937.20
201807,香蕉,280,4.4,1232.00
201808,香蕉,310,4.4,1364.00
201801,西瓜,400,3.8,1520.00
201802,西瓜,450,3.8,1710.00
201803,西瓜,481,3.5,1683.50
201804,西瓜,495,3.5,1732.50
201805,西瓜,580,3.2,1856.00
201806,西瓜,610,3.2,1952.00
201807,西瓜,688,2.5,1720.00
201808,西瓜,753,1.8,1355.40

4 read_csv方法和主要参数

df = pd.read_csv(filepath/filename,sep=',',delimiter=None,header='infer',names=None)
4.1 不加任何参数
df = pd.read_csv('a.csv')

文件名用单引号扩起来,pandas能正常解析csv文件,
文件第一行的列名会自动成为df对象的列名。

df.columns
Index(['月份', '水果', '数量', '单价', '金额'], dtype='object')
4.2 指定csv文件的分隔符
df = pd.read_csv('a.csv',sep=',')

用sep来指定csv文件的分隔符,sep的默认值是“,”,
一般csv文件的分隔符都是“,”,因此这里可以省略,pandas解析的结果同4.1。
如果csv文件用制表符Tab分隔,那么这里必须指定sep='\t'。
delimiter参数是sep参数的另一种写法,两个只要写一个就可以了。

4.3 指定列名

标题行参数header,默认值是'infer',也就是在没有指定列名时,相当于 header=0 且列名用第一行的内容作为各列的列名;

# header=0默认可以省略,表示用第一行作列名
df = pd.read_csv('a.csv',header=0)

# header=1表示用第二行作列名
df = pd.read_csv('a.csv',header=1)
# 结果列名变成  Index(['201801', '苹果', '65', '2.3', '149.50'], dtype='object')

如果要指定列名,则需要将 header=None ,然后用names参数传入列名。
当 header=None ,但不传入列名时,pandas自动用数字序列作列名:

df = pd.read_csv('a.csv',header=None)

结果是列名变成[0, 1, 2, 3, 4],csv文件的第一行被作为数据看待

         0   1    2    3        4
0       月份  水果   数量   单价       金额
1   201801  苹果   65  2.3   149.50
2   201802  苹果  101  2.3   232.30
3   201803  苹果  113  2.5   282.50

通过names参数可以指定列名,names是一个列表:

df = pd.read_csv('a.csv',header=None,names=['month','fruit','count','price','amount'])

结果可以看到列名从0,1,2,3,4变成了指定的列名:

     month fruit count price   amount
0       月份    水果    数量    单价       金额
1   201801    苹果    65   2.3   149.50
2   201802    苹果   101   2.3   232.30
3   201803    苹果   113   2.5   282.50

也就是说,当原始csv文件的第一行不是列名时,可以通过 header=None, names=list 来传入指定的列名。

这里,原始csv文件的第一行被作为数据很讨厌,可以通过 header=0 来达到替换列名的效果:

df = pd.read_csv('a.csv',header=0,names=['month','fruit','count','price','amount'])

结果可以看到csv文件的第一行被替换成了新的列名:

     month fruit  count  price  amount
0   201801    苹果     65    2.3   149.5
1   201802    苹果    101    2.3   232.3
2   201803    苹果    113    2.5   282.5
3   201804    苹果    145    2.5   362.5

5 其他参数解释

.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, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=None, compact_ints=None, use_unsigned=None, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)

filepath_or_buffer : 路径 URL 可以是http, ftp, s3, 和 file.

sep: 指定分割符,默认是’,’C引擎不能自动检测分隔符,但Python解析引擎可以

delimiter: 同sep

delimiter_whitespace: True or False 默认False, 用空格作为分隔符等价于spe=’\s+’如果该参数被调用,则delimite不会起作用

header: 指定第几行作为列名(忽略注解行),如果没有指定列名,默认header=0; 如果指定了列名header=None

names 指定列名,如果文件中不包含header的行,应该显性表示header=None

index_col: 默认为None 用列名作为DataFrame的行标签,如果给出序列,则使用MultiIndex。如果读取某文件,该文件每行末尾都有带分隔符,考虑使用index_col=False使panadas不用第一列作为行的名称。

usecols: 默认None 可以使用列序列也可以使用列名,如 [0, 1, 2] or [‘foo’, ‘bar’, ‘baz’]

as_recarray:默认False , 将读入的数据按照numpy array的方式存储,0.19.0版本后使用
pd.read_csv(…).to_records()。 注意,这种方式读入的na数据不是显示na,而是给以个莫名奇妙的值

squeeze: 默认为False, True的情况下返回的类型为Series

prefix:默认为none, 当header =None 或者没有header的时候有效,例如’x’ 列名效果 X0, X1, …

mangle_dupe_cols :默认为True,重复的列将被指定为’X.0’…’X.N’,而不是’X’…’X’。如果传入False,当列中存在重复名称,则会导致数据被覆盖。

dtype: E.g. {‘a’: np.float64, ‘b’: np.int32} 指定数据类型

engine: {‘c’, ‘python’}, optional 选择读取的引擎目前来说C更快,但是Python的引擎有更多选择的操作

skipinitialspace: 忽略分隔符后的空格,默认false,

skiprows: list-like or integer or callable, default None 忽略某几行或者从开始算起的几行

skipfooter: 从底端算起的几行,不支持C引擎

nrows: int 读取的行数

na_values: 默认None NaN包含哪些情况,默认情况下, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’. 都表现为NAN

keep_default_na: 如果na_values被定义,keep_default_na为False那么默认的NAN会被改写。 默认为True

na_filter: 默认为True, 针对没有NA的文件,使用na_filter=false能够提高读取效率

skip_blank_lines 默认为True,跳过blank lines 而且不是定义为NAN

thousands 千分位符号,默认‘,’

decimal 小数点符号,默认‘.’

encoding: 编码方式

memory_map如果为filepath_or_buffer提供了文件路径,则将文件对象直接映射到内存上,并直接从那里访问数据。使用此选项可以提高性能,因为不再有任何I / O开销。

low_memory 默认为True 在块内部处理文件,导致分析时内存使用量降低,但可能数据类型混乱。要确保没有混合类型设置为False,或者使用dtype参数指定类型。请注意,不管怎样,整个文件都读入单个DataFrame中,请使用chunksize或iterator参数以块形式返回数据。 (仅在C语法分析器中有效)

parse_dates : boolean or list of ints or names or list of lists or dict, default False

boolean. True -> 解析索引
list of ints or names. e.g. If [1, 2, 3] -> 解析1,2,3列的值作为独立的日期列;
list of lists. e.g. If [[1, 3]] -> 合并1,3列作为一个日期列使用
dict, e.g. {‘foo’ : [1, 3]} -> 将1,3列合并,并给合并后的列起名为"foo"

infer_datetime_format : boolean, default False

如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型,如果可以转换,转换方法并解析。在某些情况下会快5~10倍。

keep_date_col : boolean, default False

如果连接多列解析日期,则保持参与连接的列。默认为False。

date_parser : function, default None

用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。
1.使用一个或者多个arrays(由parse_dates指定)作为参数;
2.连接指定多列字符串作为一个列作为参数;
3.每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。

dayfirst : boolean, default False

DD/MM格式的日期类型

iterator : boolean, default False

返回一个TextFileReader 对象,以便逐块处理文件。

lineterminator : str (length 1), default None

行分割符,只在C解析器下使用。

quotechar : str (length 1), optional

引号,用作标识开始和解释的字符,引号内的分割符将被忽略。

quoting : int or csv.QUOTE_* instance, default 0

控制csv中的引号常量。可选 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)

doublequote : boolean, default True

双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用

low_memory : boolean, default True

分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使用dtype 参数指定类型。注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)

5 导入时间字段

数据字段的格式如下:

inDate
2017-01-18 00:00:01

导入方法:

dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m-%d %H:%M:%S')
df = pd.read_csv("a.csv",parse_dates=[0],date_parser=dateparse)

parse_dates:这是指定含有时间数据的列,用一个列表或者字典来指定要解析的列。

Pandas笔记系列

Pandas笔记2-导出csv文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容