“Pandas”的版本间差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
 (→Series)  | 
				 (→hdf5)  | 
				||
| (未显示同一用户的25个中间版本) | |||
| 第6行: | 第6行: | ||
*参见 https://blog.csdn.net/u014281392/article/details/75331570  | 
  *参见 https://blog.csdn.net/u014281392/article/details/75331570  | 
||
 df = pd.DataFrame([[1, 2, 3],[4, 5, 6]], columns=['col1','col2','col3'], index=['a','b'])  | 
   df = pd.DataFrame([[1, 2, 3],[4, 5, 6]], columns=['col1','col2','col3'], index=['a','b'])  | 
||
* 表格方式定义,行是 index, 列是  | 
  * 表格方式定义,行是 index, 列是columns,值是values  | 
||
 df.index   | 
|||
| ⚫ | |||
 df.columns  | 
|||
 df.values  #二维数组  | 
|||
| ⚫ | |||
*调用行 df.loc['a'],调用1到3行:df.loc[0:2](注意df[0:2]调用的是前2行,可以调用一组指定的行df.loc[sel], sel是序列的切片index  | 
|||
*df.iloc[] :是index location,以二维矩阵的位置指标(即0,1,2……)作为参数。  | 
|||
:df.iloc[2,2],调用第二行,第二列  | 
|||
* 输出为markdown文件 print(df.head().to_markdown())  | 
|||
===DataFrame和ndarray相互转换===  | 
|||
* ndarray转Dataframe :直接用pd.Dataframe,如 dataDf=pd.DataFrame(np.arange(12).reshape(3,4))   | 
|||
* Dataframe 转换为ndarray:  dataDF.as_matrix()或者dataDF.values  | 
|||
===Series===  | 
  ===Series===  | 
||
*比较像字典,  | 
  *每一项称为items,比较像字典,又分为index和values  | 
||
*默认的index是range(),所以可以从ndarray转换而来  | 
|||
*可以从字典装换而来,key是变成index  | 
  *可以从字典装换而来,key是变成index  | 
||
 sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}  | 
   sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}  | 
||
 ser3 = Series(sdata)  | 
   ser3 = Series(sdata)  | 
||
* 不同Series对象可以根据索引进行匹配计算。  | 
|||
* 根据索引进行检索:ser3.loc['Ohio']  | 
|||
* Series.describe()  #看这个序列数值的基本统计量  | 
|||
* 缺失值处理 Series.isnull(),  Series.notnull(), Series.fillnull()  | 
|||
===Index===  | 
  ===Index===  | 
||
| 第18行: | 第36行: | ||
==io==  | 
  ==io==  | 
||
===read_csv===  | 
|||
 import pandas as pd  | 
  |||
 data=pd.read_csv('cGs_for_LAMOST.csv',comment='#')  | 
   data=pd.read_csv('cGs_for_LAMOST.csv',comment='#')  | 
||
 data.columns  | 
   data.columns  | 
||
| 第28行: | 第45行: | ||
*详见 https://blog.csdn.net/brucewong0516/article/details/79092579  | 
  *详见 https://blog.csdn.net/brucewong0516/article/details/79092579  | 
||
:comment='#'  | 
  :comment='#'  | 
||
:sep=' '(或者'\s' ;sep='\t'(分隔符是Tab键)  | 
  :sep=' '(或者'\s' ;sep='\t'(分隔符是Tab键)或者delim_whitespace=True  | 
||
:usecols=[0,1,2] 读取指定列(这是在columns没有name的情况下)  | 
|||
:names=["col1","col2"]指定读取进去之后columns的name  | 
|||
===read_table===  | 
|||
:读普通的ascii文件  | 
  :读普通的ascii文件  | 
||
 file=pd.read_table(path+'test1.spectrum',skiprows=range(0,6),\  | 
   file=pd.read_table(path+'test1.spectrum',skiprows=range(0,6),usecols=range(3),\  | 
||
                  delim_whitespace=True, names=('A', 'B', 'C'), dtype={'A': np.int64, 'B': np.float64, 'C': np.float64})  | 
                    delim_whitespace=True, names=('A', 'B', 'C'), dtype={'A': np.int64, 'B': np.float64, 'C': np.float64})  | 
||
 a=file['A'].values  | 
|||
: read_table('desi_kcorr.ini',header=None, sep='\s+',dtype=np.float32)  | 
|||
*sep='\s+'(分隔符号是空格,多个空格也行)等价于delim_whitespace=True, header=None 没有标题行,所有数都按照浮点格式  | 
|||
===write_csv===  | 
|||
*例子,xmean,ymean,ystd是三个一维数组,需要输出  | 
|||
 data={'RtoRe':xmean,'ymean':ymean,'ystd':ystd} #先生成一个字典  | 
|||
 df=pd.DataFrame(data)  | 
|||
 df.to_csv('mydata.csv',index=False)  | 
|||
==[[hdf5]]==  | 
|||
*复杂数据结构可以组合成一个hdf5结构 [https://www.cnblogs.com/feffery/p/11135082.html]  | 
|||
*写入  | 
|||
 store = pd.HDFStore('store.h5')  | 
|||
 #生成一个1亿行,5列的标准正态分布随机数表  | 
|||
 df = pd.DataFrame(np.random.rand(100000000,5))  | 
|||
 store['df'] = df  | 
|||
 ####压缩格式存储  | 
|||
 h5 = pd.HDFStore('store_comp.h5','w', complevel=4, complib='blosc')  | 
|||
 h5['data'] = df  | 
|||
*读入  | 
|||
*store = pd.HDFStore('Omet_CEM.h5')  | 
|||
*store.keys()  | 
|||
 data=pd.read_hdf('/data/stock/test_c4.h5',key='data')  | 
|||
*pandas 生成的h5文件,其数据块只可以是series或者DataFrame,不支持其他格式。反过来h5py生成的h5文件其value可以直接是ndarray  | 
|||
 #numpy数据直接写入H5文件  | 
|||
 f = h5py.File('test-dev.h5','w')   | 
|||
 f['bndbox'] = h5_bndbox   | 
|||
 f['imgname'] = h5_imgname   | 
|||
 f.close()  | 
|||
*打开h5文件出错:'Resource temporarily unavailable',一般是因为打开了文件接口没有关闭,可以强行用一下模式进行  | 
|||
 os.environ["HDF5_USE_FILE_LOCKING"] = "FALSE"  | 
|||
*pd.read_hdf和pd.HDFstore的效果好像不一样(碰到HDFStore生成的文件用前者读取出错)  | 
|||
==[[pickle]]==  | 
  ==[[pickle]]==  | 
||
2025年9月11日 (四) 00:42的最新版本
Python Data Analysis Library
数据结构
DataFrame
df = pd.DataFrame([[1, 2, 3],[4, 5, 6]], columns=['col1','col2','col3'], index=['a','b'])
- 表格方式定义,行是 index, 列是columns,值是values
 
df.index df.columns df.values #二维数组
- df[0:1]调用第一行,调用列 df['col1']
 - 调用行 df.loc['a'],调用1到3行:df.loc[0:2](注意df[0:2]调用的是前2行,可以调用一组指定的行df.loc[sel], sel是序列的切片index
 - df.iloc[] :是index location,以二维矩阵的位置指标(即0,1,2……)作为参数。
 
- df.iloc[2,2],调用第二行,第二列
 
- 输出为markdown文件 print(df.head().to_markdown())
 
DataFrame和ndarray相互转换
- ndarray转Dataframe :直接用pd.Dataframe,如 dataDf=pd.DataFrame(np.arange(12).reshape(3,4))
 - Dataframe 转换为ndarray: dataDF.as_matrix()或者dataDF.values
 
Series
- 每一项称为items,比较像字典,又分为index和values
 - 默认的index是range(),所以可以从ndarray转换而来
 - 可以从字典装换而来,key是变成index
 
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
ser3 = Series(sdata)
- 不同Series对象可以根据索引进行匹配计算。
 - 根据索引进行检索:ser3.loc['Ohio']
 - Series.describe() #看这个序列数值的基本统计量
 - 缺失值处理 Series.isnull(), Series.notnull(), Series.fillnull()
 
Index
- 比较像集合set,但是元素可以重复
 
io
read_csv
data=pd.read_csv('cGs_for_LAMOST.csv',comment='#')
data.columns
ra=data['ra']
dec=data['dec]
- 现在推荐read_csv 读普通表格了,默认总是把第一行做表头,如果没有表头用header=None
 - 详见 https://blog.csdn.net/brucewong0516/article/details/79092579
 
- comment='#'
 - sep=' '(或者'\s' ;sep='\t'(分隔符是Tab键)或者delim_whitespace=True
 - usecols=[0,1,2] 读取指定列(这是在columns没有name的情况下)
 - names=["col1","col2"]指定读取进去之后columns的name
 
read_table
:读普通的ascii文件
file=pd.read_table(path+'test1.spectrum',skiprows=range(0,6),usecols=range(3),\
                 delim_whitespace=True, names=('A', 'B', 'C'), dtype={'A': np.int64, 'B': np.float64, 'C': np.float64})
a=file['A'].values
- read_table('desi_kcorr.ini',header=None, sep='\s+',dtype=np.float32)
 
- sep='\s+'(分隔符号是空格,多个空格也行)等价于delim_whitespace=True, header=None 没有标题行,所有数都按照浮点格式
 
write_csv
- 例子,xmean,ymean,ystd是三个一维数组,需要输出
 
data={'RtoRe':xmean,'ymean':ymean,'ystd':ystd} #先生成一个字典
df=pd.DataFrame(data)
df.to_csv('mydata.csv',index=False)
hdf5
- 复杂数据结构可以组合成一个hdf5结构 [1]
 - 写入
 
store = pd.HDFStore('store.h5')
#生成一个1亿行,5列的标准正态分布随机数表
df = pd.DataFrame(np.random.rand(100000000,5))
store['df'] = df
####压缩格式存储
h5 = pd.HDFStore('store_comp.h5','w', complevel=4, complib='blosc')
h5['data'] = df
- 读入
 - store = pd.HDFStore('Omet_CEM.h5')
 - store.keys()
 
data=pd.read_hdf('/data/stock/test_c4.h5',key='data')
- pandas 生成的h5文件,其数据块只可以是series或者DataFrame,不支持其他格式。反过来h5py生成的h5文件其value可以直接是ndarray
 
#numpy数据直接写入H5文件
f = h5py.File('test-dev.h5','w') 
f['bndbox'] = h5_bndbox 
f['imgname'] = h5_imgname 
f.close()
- 打开h5文件出错:'Resource temporarily unavailable',一般是因为打开了文件接口没有关闭,可以强行用一下模式进行
 
os.environ["HDF5_USE_FILE_LOCKING"] = "FALSE"
- pd.read_hdf和pd.HDFstore的效果好像不一样(碰到HDFStore生成的文件用前者读取出错)
 
pickle
- 使用DataFrame的to_pickle属性就可以生成pickle文件对数据进行永久储存
 
df = pd.DataFrame(np.arange(20).reshape(4,5))
df.to_pickle('foo.pkl')
pd.read_pickle('foo.pkl')