学习笔记

pandas查看选取数据

"""


"""
import pandas as pd
# 将pandas作为第三方库导入,我们一般为pandas取一个别名叫做pd
pd.set_option('expand_frame_repr', False)  # 当列太多时显示不清楚

# =====导入数据
#df = pd.read_excel(
    # 该参数为数据在电脑中的路径,
    # 要注意字符串转义符号 \ ,可以使用加r变为raw string或者每一个进行\\转义
#    filepath_or_buffer=r'C:\Users\llj\Documents\Python\1.xlsx',
    # 编码格式,不同的文件有不同的编码方式,一般文件中有中文的,编码是gbk,默认是utf8
    # ** 大家不用去特意记住很多编码,我们常用的就是gbk和utf8,切换一下看一下程序不报错就好了
   # encoding='gbk',
    # 该参数代表跳过数据文件的的第1行不读入
    #skiprows=1,
    # nrows=15,
    # parse_dates=['交易日期'],
    # 将指定列设置为index。若不指定,index默认为0, 1, 2, 3, 4...
    #index_col=['交易日期'],
#)

df=pd.read_excel('C:/Users/llj/Documents/Python/1.xlsx',index_col='股票简称')

print(df)
'''
     股票代码  股票简称  现价(元)  涨跌幅(%)
0     810  创维数字  25.21   1.941
1  600256  广汇能源  12.50   7.852
2    2444  巨星科技  27.02  -0.111
3    2416   爱施德  10.44  -0.287
4  601155  新城控股  21.51   4.114
5    2831  裕同科技  30.19   2.757
6    1914  招商积余  17.50   1.449
7  603979   金诚信  21.25   7.378
8    2372  伟星新材  20.72   5.445
9  600153  建发股份  11.48   2.226'''



print('---------------查看数据------------------')
#.shape可以输出dataframe有多上行和列
print(df.shape) #(10, 4)

#如果只是查看dateframe有多少行
print(df.shape[0])  #10

#查看dateframe有多少列
print(df.shape[1])  #4
print(df.shape[-1]) #4

print('---')
#输出每一列的列标签
print(df.columns)   #Index(['股票代码', '股票简称', '现价(元)', '涨跌幅(%)'], dtype='object')
#另一个方法是用for遍历
for i in df.columns:
    print(i)
'''
股票代码
股票简称
现价(元)
涨跌幅(%)'''


print('---')
#输出每一行的行标签
print(df.index) #默认情况下是:RangeIndex(start=0, stop=10, step=1)
#如果在读取文件时,设置了index_col=参数,那么就是将指定的一列中的每个元素作为每一行的行标签
'''
Index(['创维数字', '广汇能源', '巨星科技', '爱施德', '新城控股', '裕同科技', '招商积余', '金诚信', '伟星新材',
       '建发股份'],
      dtype='object', name='股票简称')'''

print('---')
#遍历每一行的行标签
print(df.index)
'''
Index(['创维数字', '广汇能源', '巨星科技', '爱施德', '新城控股', '裕同科技', '招商积余', '金诚信', '伟星新材',
       '建发股份'],
      dtype='object', name='股票简称')'''

#同样可以使用for来遍历
for i in df.index:
    print(i)
'''
创维数字
广汇能源
巨星科技
爱施德
新城控股
裕同科技
招商积余
金诚信
伟星新材
建发股份'''

print('---------')
#查看每一列数据的数据类型
''' 在读取文件时,parse_dates=''可以将指定列的数据类型设置为日期类型
此外读取的列中不包含index,如果前期将某一列设置为index,那么读取结果不会包含这一列'''
print(df.dtypes)
'''
股票代码        int64
现价(元)     float64
涨跌幅(%)    float64
dtype: object'''


print('---')
#查看前几行的数据,默认前5行,可以自定义参数
print(df.head())
'''
        股票代码  现价(元)  涨跌幅(%)
股票简称                       
创维数字     810  25.21   1.941
广汇能源  600256  12.50   7.852
巨星科技    2444  27.02  -0.111
爱施德     2416  10.44  -0.287
新城控股  601155  21.51   4.114'''

print('---')
#查看最后几列的数据,默认最后5列
print(df.tail(1))
'''
        股票代码  现价(元)  涨跌幅(%)
股票简称                       
建发股份  600153  11.48   2.226'''

print('---')
'''
查看随机几行的数据,或者随机查看百分之几十的数据,可以使用.sample()
两种查看方法使用的参数写法不同,前者是n=指定行数,后者是frac=比例,查看10%就将值设为0.1'''
print(df.sample(n=1))
'''        股票代码  现价(元)  涨跌幅(%)
股票简称                       
广汇能源  600256   12.5   7.852'''
print('---')
print(df.sample(frac=0.2))
'''
        股票代码  现价(元)  涨跌幅(%)
股票简称                       
建发股份  600153  11.48   2.226
广汇能源  600256  12.50   7.852'''

print('---')
#.describe()可以查看查看每一列数据的总和信息,包括数量、中位数、标准差、最小值、最大值等
print(df.describe())
'''
                股票代码      现价(元)    涨跌幅(%)
count      10.000000  10.000000  10.00000
mean   241833.000000  19.782000   3.27640
std    309455.907316   6.754672   2.86418
min       810.000000  10.440000  -0.28700
25%      2383.000000  13.750000   1.57200
50%      2637.500000  20.985000   2.49150
75%    600230.250000  24.285000   5.11225
max    603979.000000  30.190000   7.85200'''



print('-----------------修改print()的输出结果--------------------')
'''当列的数量过多时,print()之后默认会用...省略几列,使用pandas的.set_option('expand_frame_repr',False),可以print出所有的列'''
#pd.set_option('expand_frame_repr',False)


'''当要print的数据表的行数过多,pandas默认也会省略一些行,要是想要自己设定显示的行数,可以通过pandas的.set_option("display.max_rows",行数),如果设置显示200行,会print出前100行与后100行'''
#pd.set_option('display.max_rows',666)

'''要设置print出的小数的显示位数,比如原数据是6位小数,但只print2位小数,可以使用pandas的.set_option('precision',小数位数),这个功能只会影响显示效果,并不会修改原始数据'''
#pd.set_option('precision',1)
#pd.set_option('precision', 1)  # 浮点数的精度
#print(pd)

'''但不知什么原因,我这里的输出结果是:
<module 'pandas' from 'D:\\1\\anaconda3\\lib\\site-packages\\pandas\\__init__.py'>'''


#选取指定的一列或多列
print(df['股票代码'])   #会将index一起打印出来,此处index是股票简称
'''
股票简称
创维数字       810
广汇能源    600256
巨星科技      2444
爱施德       2416
新城控股    601155
裕同科技      2831
招商积余      1914
金诚信     603979
伟星新材      2372
建发股份    600153
Name: 股票代码, dtype: int64'''
print('---')
print(df[['股票代码','涨跌幅(%)']])  #选取多列还需要一个大的中括号
'''
        股票代码  涨跌幅(%)
股票简称                
创维数字     810   1.941
广汇能源  600256   7.852
巨星科技    2444  -0.111
爱施德     2416  -0.287
新城控股  601155   4.114
裕同科技    2831   2.757
招商积余    1914   1.449
金诚信   603979   7.378
伟星新材    2372   5.445
建发股份  600153   2.226'''

print('---')
#选取指定的一行
df=pd.read_excel('C:/Users/llj/Documents/Python/1.xlsx',index_col='股票简称')
print(df.loc['广汇能源'])
'''
股票代码      600256.000
现价(元)         12.500
涨跌幅(%)         7.852
Name: 广汇能源, dtype: float64'''


print('---')
#选取指定的多行
print(df.loc[['建发股份','广汇能源']])
'''
        股票代码  现价(元)  涨跌幅(%)
股票简称                       
建发股份  600153  11.48   2.226
广汇能源  600256  12.50   7.852'''


print('---')
#选取连续的多列,类似于list的切片操作
print(df.loc['创维数字':'招商积余'])
'''
        股票代码  现价(元)  涨跌幅(%)
股票简称                       
创维数字     810  25.21   1.941
广汇能源  600256  12.50   7.852
巨星科技    2444  27.02  -0.111
爱施德     2416  10.44  -0.287
新城控股  601155  21.51   4.114
裕同科技    2831  30.19   2.757
招商积余    1914  17.50   1.449'''

#选取所有的行,以及指定的多列
print(df.loc[:,'现价(元)':'涨跌幅(%)'])   #:前后留空表示选取所有,逗号之后,'现价(元)':'涨跌幅(%)'表示选取从现价到涨跌幅所有的列
'''
      现价(元)  涨跌幅(%)
股票简称               
创维数字  25.21   1.941
广汇能源  12.50   7.852
巨星科技  27.02  -0.111
爱施德   10.44  -0.287
新城控股  21.51   4.114
裕同科技  30.19   2.757
招商积余  17.50   1.449
金诚信   21.25   7.378
伟星新材  20.72   5.445
建发股份  11.48   2.226'''

print('---')
#旋球指定的多行的某一列的数据
print(df.loc['广汇能源':'招商积余','涨跌幅(%)'])
'''
股票简称
广汇能源    7.852
巨星科技   -0.111
爱施德    -0.287
新城控股    4.114
裕同科技    2.757
招商积余    1.449
Name: 涨跌幅(%), dtype: float64'''


print('---')
#选取所有的行和所有的列
print(df.loc[:,:])
'''
        股票代码  现价(元)  涨跌幅(%)
股票简称                       
创维数字     810  25.21   1.941
广汇能源  600256  12.50   7.852
巨星科技    2444  27.02  -0.111
爱施德     2416  10.44  -0.287
新城控股  601155  21.51   4.114
裕同科技    2831  30.19   2.757
招商积余    1914  17.50   1.449
金诚信   603979  21.25   7.378
伟星新材    2372  20.72   5.445
建发股份  600153  11.48   2.226'''

print('---')
#选取指定的某一行的指定的某一列
print(df.loc['广汇能源','现价(元)'])   #12.5


#指定读取某一行的某一列的单个元素可以使用at
print(df.at['广汇能源','现价(元)'])    #12.5



'''
loc为Selection by Label函数,即按标签选取数据,iloc为按位置选择数据,即第x行、第X列数据,只能输入整数型的参数(索引值)。
若要选取第一列的所有数据,可以输入df.iloc[:,0]也就是所有行的第0列,不接受字段名称作为参数,仅支持列字段的位置索引作为参数。
第一个参数是行索引,第二个参数是列索引,它们之间有个英文逗号,如果没有逗号就是默认为列为所有列,因为:表示全部可以省略不写

'''

print('---')
print(df.iloc[0])   #选取第一行,也就是引值为0的行
'''
股票代码      810.000
现价(元)      25.210
涨跌幅(%)      1.941
Name: 创维数字, dtype: float64'''

print('---')
print(df.iloc[1:3]) #选取索引值1到索引值3之前的行
'''
        股票代码  现价(元)  涨跌幅(%)
股票简称                       
广汇能源  600256  12.50   7.852
巨星科技    2444  27.02  -0.111'''


print('---')
#选取所有行的第一列到第三列
print(df.iloc[:,0:3])
'''
        股票代码  现价(元)  涨跌幅(%)
股票简称                       
创维数字     810  25.21   1.941
广汇能源  600256  12.50   7.852
巨星科技    2444  27.02  -0.111
爱施德     2416  10.44  -0.287
新城控股  601155  21.51   4.114
裕同科技    2831  30.19   2.757
招商积余    1914  17.50   1.449
金诚信   603979  21.25   7.378
伟星新材    2372  20.72   5.445
建发股份  600153  11.48   2.226'''

print('---')
#iloc读取所有的行和所有的列
print(df.iloc[:,:])

print('---')
#iloc的iat类似于loc的at,指定读取第几行第几列的元素(查找时不包含index)
print(df.iat[2,1])
'''不包含index行标签的索引值为2的行与索引值为1的列的单元格'''

# =====看数据
# print(df.shape)  # 输出dataframe有多少行、多少列。
# print(df.shape[0])  # 取行数量,相应的列数量就是df.shape[1]
# print(df.columns)  # 顺序输出每一列的名字,演示如何for语句遍历。
# print(df.index)  # 顺序输出每一行的名字,可以for语句遍历。
# print(df.dtypes)  # 数据每一列的类型不一样,比如数字、字符串、日期等。该方法输出每一列变量类型
# print(df.head(3))  # 看前3行的数据,默认是5。与自然语言很接近
# print(df.tail(3))  # 看最后3行的数据,默认是5。
# print(df.sample(n=3))  # 随机抽取3行,想要去固定比例的话,可以用frac参数
# print(df.describe())  # 非常方便的函数,对每一列数据有直观感受;只会对数字类型的列有效

# 对print出的数据格式进行修正
# pd.set_option('expand_frame_repr', False)  # 当列太多时显示不清楚
# pd.set_option("display.max_rows", 1000)  # 设定显示最大的行数
# pd.set_option('precision', 1)  # 浮点数的精度
# print(df.head())

# 更多设置请见http://pandas.pydata.org/pandas-docs/stable/options.html


# =====如何选取指定的行、列
# print(df['开盘价'])  # 根据列名称来选取,读取的数据是Series类型
# print(df[['交易日期', '收盘价']])  # 同时选取多列,需要两个括号,读取的数据是DataFrame类型
# print(df[['开盘价']])

# print(df)

# print(df.loc[['1999-11-11', '1999-11-25']])
# loc操作:通过label(columns和index的名字)来读取数据
# print(df.loc['1999-11-11'])  # 选取指定的某一行,读取的数据是Series类型
# print(df.loc[['2000-03-30', '2000-07-31']])  # 选取指定的两行
# print(df.loc['2000-03-30': '2000-04-30'])  # 选取在此范围内的多行,和在list中slice操作类似,读取的数据是DataFrame类型
# print(df.loc[:, '开盘价':'最低价'])  # 选取在此范围内的多列,读取的数据是DataFrame类型
# print(df.loc['2000-03-30': '2000-07-31', '开盘价':'收盘价'])  # 读取指定的多行、多列。逗号之前是行的范围,逗号之后是列的范围。读取的数据是DataFrame类型
# print(df.loc[:, :])  # 读取所有行、所有列,读取的数据是DataFrame类型
# print(df.at['2000-03-30', '开盘价'])  # 使用at读取指定的某个元素。loc也行,但是at更高效。
# print(df.loc['2000-03-30', '开盘价'])

# iloc操作:通过position来读取数据
# print(df.iloc[0])  # 以index选取某一行,读取的数据是Series类型
# print(df.iloc[1:3])  # 选取在此范围内的多行,读取的数据是DataFrame类型
# print(df.iloc[:, 1:3])  # 选取在此范围内的多列,读取的数据是DataFrame类型
# print(df.iloc[1:3, 1:3])  # 读取指定的多行、多列,读取的数据是DataFrame类型
# print(df.iloc[:, :])  # 读取所有行、所有列,读取的数据是DataFrame类型
# print(df.iat[1, 3])  # 使用iat读取指定的某个元素。使用iloc也行,但是iat更高效。


# 哪里可以看到全部的函数?http://pandas.pydata.org/pandas-docs/stable/api.html

1 thought on “pandas查看选取数据”

发表回复