读取的数据默认为DataFrame类型
pd.to_datetime(df[‘date’]): 将读取的数据的”date“列的值转换成日期”YY-MM-DD“形式;
df[“索引字符串”]: 可以返回满足条件的数据,但只想筛选一个索引时,需用切片形式如,df[“索引字符串”:“索引字符串”]
df.set_index(‘date’):将属性”date“设置为索引,但这个函数返回一个dateframe数据并不改变原始的数据
下面的程序输出显示了不同的数据结构
import pandas as pd
df = pd.read_csv(r'test_data.csv',\
header=None)
df.columns=["date","number"]`在这里插入代码片`
#命名列的名称
print("*"*30)
# 将数据转换为日期类型
df['date']=pd.to_datetime(df['date'])
# 将date作为index
df=df.set_index('date')
print(df['2013'].head(4))# 筛选出所有含有2013的元素显示
print(df['2013-10'])
#读取index中含有2013-10的元素,按列表顺序
print(df['2013-10-26':'2013-10-26'])
# DataFrame类型的数据只有一个索引元素时,只能使用这种方式,但series则不需要
print(type(df))
#df的数据类型
s = pd.Series(df['number'], index=df.index)
print("*"*30)
print(s['2013-10-26'])
# 一个索引,只需要写入索引就行
print(type(s))
#s的数据类型
参考:https://blog.csdn.net/u010801439/article/details/80033341,http://pandas.pydata.org/pandas-docs/stable/io.html,https://blog.csdn.net/shanmou1782/article/details/90441391
官方参数:
pandas.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
参数解释:
1、filepath_or_buffer:读取的文件路径,URL(包含http,ftp,s3)链接等,为了防止读取的路径因为符号发生转义,可以在路径字符串前加一个小写的’“r”
2、sep : str , default’,’
指定分隔符。如果不指定参数,则默认使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’\r\t’
正则表达式中==\s匹配任何空白字符==,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]
\f -> 匹配一个换页
\n -> 匹配一个换行符
\r -> 匹配一个回车符
\t -> 匹配一个制表符
\v -> 匹配一个垂直制表符
而“\s+”则表示匹配任意多个上面的字符。
3、delimiter : str, defau加粗样式lt None
定界符,备选分隔符(如果指定该参数,则sep参数失效)
4、delim_whitespace : boolean, default False.
指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep=’\s+’。如果这个参数设定为Ture那么delimiter 参数失效。
5、header : int or list of ints, default ‘infer’
参考:https://blog.csdn.net/zjyklwg/article/details/79556545
指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉(数据丢失)。
注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。
多行列实验总结:
列可以是多行,但是[2]或[1]会返回空DataFrame,另外只有单行的列才可以使用names参数。
names : 列名数组,缺省值 None
6、names : array-like, default None
用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。默认列表中不能出现重复,除非设定参数mangle_dupe_cols=True。
7、index_col : int or sequence or False, default None
用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。
如果文件不规则,行尾有分隔符,则可以设定index_col=False 来是的pandas不适用第一列作为行索引。
8、usecols : array-like, default None
返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。例如:usecols有效参数可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用这个参数可以加快加载速度并降低内存消耗。
9、dtype : Type name or dict of column -> type, default None
每列数据的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32}
10、encoding : str, default None
指定字符集类型,通常指定为**‘utf-8’**. List of Python standard encodings
df.columns[“属性1”,“属性2”]命令可以设置每列数据的属性名称
df[“属性1”],可访问所有该属性的数据
pd.to_datatime()可将参数的内容修改成时间格式为:年份-月-日
df.head(2)返回读取数据的前2个元素内容
df.tail(2)返回读取数据最后2个元素
(程序的执行依赖.csv的文件数据,因此需要确保数据一致,显示才能一致)
import pandas as pd
df = pd.read_csv(r'test_data.csv',\
header=None)
print(df)
'''
0 1
0 2013/10/24 3
1 2013/10/25 4
2 2013/10/26 5
3 2017/2/14 6
4 2017/2/22 6
'''
print("*"*30)
df.columns=["date","number"]
#命名列的名称
print(df)
'''
date number 上个命令后的区别
0 2013/10/24 3
1 2013/10/25 4
2 2013/10/26 5
3 2017/2/14 6
4 2017/2/22 6
'''
print("*"*30)
# 将数据转换为日期类型
df['date']=pd.to_datetime(df['date'])
# 将date作为index
df=df.set_index('date')
print(df.head(2)) #显示数据前2个元素
''' number
date
2013-10-24 3
2013-10-25 4
'''
print(df.tail(2)) #显示数据的后2个元素
'''
number
date
2017-02-14 6
2017-02-22 6
'''
print(df.shape) #(5,1)
print(df['2013'])# 筛选出所有含有2013的元素显示
'''
number
date
2013-10-24 3
2013-10-25 4
2013-10-26 5
'''