http://blog.csdn.net/pipisorry/article/details/52208727
输出格式控制
pandas dataframe数据全部输出,数据太多也不用省略号表示。
pd.set_option('display.max_rows', None, 'display.max_columns',None)
或者with option_context('display.max_rows', 10, 'display.max_columns', 5):
数据输入输出
数据pickling
pandas数据pickling比保存和读取csv文件要快2-3倍(lz测试不准,差不多这么多)。
ltu_df.to_pickle(os.path.join(CWD, 'middlewares/ltu_df'))
ltu_df = pd.read_pickle(os.path.join(CWD, 'middlewares/ltu_df'))
不过lz测试了一下,还是直接pickle比较快,比pd.read_pickle快2倍左右。
pickle.dump(ltu_df, open(os.path.join(CWD, 'middlewares/ltu_df.pkl'), 'wb'))
ltu_df = pickle.load(open(os.path.join(CWD, 'middlewares/ltu_df.pkl'), 'rb'))
CSV
通常来说,数据是CSV格式,就算不是,至少也可以转换成CSV格式。
读取csv文件 read_csv
df = pd.read_csv(filename_in, header=0, sep='\t', encoding='utf-8', error_bad_lines=False, nrows=None, usecols=None)
lines = pd.read_csv(filename, sep='\t', header=None,names=col_names, parse_dates=[1], skip_blank_lines=True, index_col=0, usecols=None, error_bad_lines=False).reset_index()
dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
data = pd.read_csv('AirPassengers.csv', parse_dates='Month', index_col='Month',date_parser=dateparse)
参数:
filepath_or_buffer : str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO). 可以是URL,可用URL类型包括:http, ftp, s3和文件。本地文件读取实例:/localhost/path/to/table.csv.
sep : str, default ‘,’.指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器,并且忽略数据中的逗号。正则表达式例子:'\r\t'。
skiprows=2,表示前面两行[0, 1]都不读入,等价于skiprows=[0, 1];
nrows int, default None.
Number of rows of file to read. Useful for reading pieces of large files.
header=None第0行不作为列名;
names=[''] 指定列名是什么,不能用于筛选;
usecols 指定使用哪些列或列名;a valid list-like usecols parameter would be [0, 1, 2] or ['foo', 'bar', 'baz'].
parse_dates=[] 解析指定行为date类型;
dtype : Type name or dict of column -> type, default None 每列数据的数据类型。例如 dtype={'a': np.float64, 'b': np.int32}或者dtype=str。
encoding : str, default None指定字符集类型,通常指定为'utf-8'. List of Python standard encodings。
index_col=0 指定某列为行索引,否则自动索引0, 1, .....。reset_index()是其反操作。
quoting : int or csv.QUOTE_* instance, default 0. Control field quoting behavior per csv.QUOTE_* constants. Use one of QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3). 控制csv中的引号常量。文本引入标志符,默认为双引号,若读取的数据中包含双引号,则需要在函数中写入这个参数,quoting=3,3代表None,即无文本引入标志符,否则将会出现读取串行现象。如果报错:pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at row,需要设置 import csv 参数加上quoting=csv.QUOTE_NONE。
lineterminator : str (length 1), default None 行分割符,只在C解析器下使用。如果报错:pandas.errors.ParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file. 解决:the cause was that there were some carriage returns "\r" in the data that pandas was using as a line terminator as if it was "\n". I thought I'd post here as that might be a common reason this error might come up.The solution I found was to add lineterminator='\n' into the read_csv function。
doublequote : boolean, default True. 双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。
escapechar : str (length 1), default None. 当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。
error_bad_lines: 默认为True,如果想要跳过出错的行,继续向下读取,可将其设为False。这里的出错应该只是:读取文件时遇到和列数不对应的行时会报错。其它的解析出错貌似不能,比如dtype指定某列为int时,有错误数据就还是会报错。这时只能先将转换的dtype里这个列名去掉,再dropna/fillna,之后再通过df[['列名']] = df[['列名']].astype(int)转换。
parse_dates:这是指定含有时间数据信息的列。正如上面所说的,列的名称为“月份”。
index_col:使用pandas 的时间序列数据背后的关键思想是:目录成为描述时间数据信息的变量。所以该参数告诉pandas使用“月份”的列作为索引。
date_parser:指定将输入的字符串转换为可变的时间数据。Pandas默认的数据读取格式是‘YYYY-MM-DD HH:MM:SS’。如需要读取的数据没有默认的格式,就要人工定义。这和dataparse的功能部分相似,这里的定义可以为这一目的服务。[python模块 - 时间模块 ]
converters : dict, default None: Dict of functions for converting values in certain columns. Keys can eitherbe integers or column labels.将数据某列按特定函数转化,必然可以取代自定义时date_parser和parse_dates两个参数呀。
如解析时间时想返回时间戳的浮点数表示时:def dateParse(s): return float(__import__('datetime').datetime.timestamp(__import__('dateutil.parser').parser.parse(s)))
df = pd.read_csv(os.path.join(CA_DATASET_DIR, checkin_ca), header=0, sep='\t', converters={'Time(GMT)': dateParse})
Note: 读取速度比numpy.loadtxt快多了,近10倍,包括转换成list的时间。
# Reading data from web
data_url="https://raw.githubusercontent.com/alstat/Analysis-with-Programming/master/2014/Python/Numerical-Descriptions-of-the-Data/data.csv"
df =pd.read_csv(data_url)
写入csv文件Writing to a csv file
header: Whether to write out the column names (default True)
data_df.to_csv(path,index=False, sep='\t', header=True, encoding='utf-8')
Note:
1 在参数中加上index=False,否则写入的数据会默认加上index,大多数是没有用的。
2 不用header时的设置header=False。
Excel
好像如果使用pd.read_excel要安装xlrd:pip install xlrd
Reading from an excel file
pandas.
read_excel(
io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)
参数:converters:读数据的时候使用converters指定列数据的数值类型 pd.read_excel('a.xlsx',converters={0: str})。
sheet_name: None就是读取所有的sheet,返回的就是一个ordereddict;指定就只读取指定sheet,只有一个返回的就是dataframe。
header:指定header所在列 (0开始)。
只读1页返回df
df = pd.read_excel(file_name, sheet_name="Sheet2", names=['col1', 'col2'], header=None, dtype=object)
读所有页返回dict
data_df_dict = pd.read_excel(filename, sheet_name=None, header=0)
data_df = pd.concat(data_df_dict.values())
Writing to an excel file
df.to_excel('a.xlsx', index=False, sheet_name='Sheet1')
HDF5
Reading and writing to HDFStores
Writing to a HDF5 Store
In [138]: df.to_hdf('foo.h5','df')
Reading from a HDF5 Store
In [139]: pd.read_hdf('foo.h5','df')
Out[139]:
A B C D
2000-01-01 0.266457 -0.399641 -0.219582 1.186860
2000-01-02 -1.170732 -0.345873 1.653061 -0.282953
... ... ... ... ...
2002-09-25 -10.216020 -9.480682 -3.933802 29.758560
2002-09-26 -11.856774 -10.671012 -3.216025 29.369368
[1000 rows x 4 columns]
Gotchas
If you are trying an operation and you see an exception like:
>>> if pd.Series([False, True, False]):
print("I was true")
Traceback
...
ValueError: The truth value of an array is ambiguous. Use a.empty, a.any() or a.all().
See Comparisons for an explanation and what to do.
See Gotchas as well.
from: http://blog.csdn.net/pipisorry/article/details/52208727
ref: [pandas输入输出官网IO Tools (Text, CSV, HDF5, ...)¶]