Dataframe 常用 *** 作手册

Dataframe 常用 *** 作手册,第1张

Dataframe 常用 *** 作手册

官方文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Dataframe.dtypes.html

1 df的构造

pandas有两种重要的数据结构,分别是Series和Dataframe

  • Series: 类似一个一维数组,一个Series对应Dataframe的一列
  • Dataframe:类似一个二维数组,一个Dataframe由几个Series列构成。
1.1 读取excel.csv
# 读取excel,csv文件
import pandas as pd
df = pd.read_csv('df.csv')
df = pd.read_excel('df.xlsx')

关于excel/csv的读取,其参数为:

  • io :excel 路径;
  • sheetname:默认是sheetname为0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。
  • header :指定作为列名的行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None;
  • skiprows:省略指定行数的数据
  • skip_footer:省略从尾部数的行数据
  • index_col :指定列为索引列,也可以使用 u’string’
  • names:指定列的名字,传入一个list数据
def read_excel(io, sheet_name=0, header=0, skiprows=None,skip_footer=0,
    index_col=None, names=None, usecols=None, parse_dates=False,
    date_parser=None, na_values=None, thousands=None,
    convert_float=True, converters=None, dtype=None,
    true_values=None, false_values=None, engine=None,
    squeeze=False, **kwds)
1.2 字典/series转df
 
# 字典->Dataframe
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.Dataframe(data=d)
col1col2013124
# series ->DF
df = pd.Dataframe(np.array([[1, 2, 3], [4, 5, 6], [7,8, 9]]),
                   columns=['a', 'b', 'c'])
df
abc012314562789
# df->excel/csv

df.to_excel('df.xlsx',index = False,header=None)  # 不保留索引和列名,保留列名就是header = 1
1.3 多个df *** 作
# 两个df合并
df = pd.concat([df1,df2])
 
1.4 df 属性值 
df.info() 

打印关于Dataframe的信息,包括索引dtype和列、非空值和内存使用情况
df.info(verbose=None, buf=None, max_cols=None, memory_usage=None, show_counts=None, null_counts=None)

df.info()

Index: 4 entries, Ohio to New York
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   one     4 non-null      int32
 1   two     4 non-null      int32
 2   three   4 non-null      int32
 3   four    4 non-null      int32
dtypes: int32(4)
memory usage: 256.0+ bytes
df.head(5)

查看几行数据

df.head(5)
df.index

提取index名

df.index.tolist()
['Ohio', 'Colorado', 'Utah', 'New York']
df.columns

提取列名

df.columns.tolist()
['one', 'two', 'three', 'four']
df.shape

显示维度

df.shape
(4, 4)
df.describe()

显示基础统计信息

df.describe()
onetwothreefourcount4.0000004.0000004.0000004.000000mean6.0000007.0000008.0000009.000000std5.1639785.1639785.1639785.163978min0.0000001.0000002.0000003.00000025%3.0000004.0000005.0000006.00000050%6.0000007.0000008.0000009.00000075%9.00000010.00000011.00000012.000000max12.00000013.00000014.00000015.000000 df.items()

遍历Dataframe列,返回一个列名和内容为Series的元组

for label, content in df.items():
    print(label)
    print(content)
one
Ohio         0
Colorado     4
Utah         8
New York    12
Name: one, dtype: int32
two
Ohio         1
Colorado     5
Utah         9
New York    13
Name: two, dtype: int32
three
Ohio         2
Colorado     6
Utah        10
New York    14
Name: three, dtype: int32
four
Ohio         3
Colorado     7
Utah        11
New York    15
Name: four, dtype: int32
2 df 数据类型
df = pd.Dataframe(
    {
        "a": pd.Series([1, 2, 3], dtype=np.dtype("int32")),
        "b": pd.Series(["x", "y", "z"], dtype=np.dtype("O")),
        "c": pd.Series([True, False, np.nan], dtype=np.dtype("O")),
        "d": pd.Series(["h", "i", np.nan], dtype=np.dtype("O")),
        "e": pd.Series([10, 1, 20], dtype=np.dtype("int64")),
        "f": pd.Series([np.nan, 100.5, 200], dtype=np.dtype("float")),
    }
)
df
abcdef01xTrueh10NaN12yFalsei1100.523zNaNNaN20200.0 df.dtypes

查看df每一列数据类型

df.dtypes
a      int32
b     object
c     object
d     object
e      int64
f    float64
dtype: object
df.astype()

改变列的数据类型

### Cast all columns to int32:
df.astype('O').dtypes

### 指定列名转换
df.astype({'c':'bool'}).dtypes
a      int32
b     object
c       bool
d     object
e      int64
f    float64
dtype: object
df.select_dtypes

根据所需要的类型返回子集

df.select_dtypes(include='bool')
012
# 反向选择 exclude
df.select_dtypes(exclude=['int64'])
abcdf01xTruehNaN12yFalsei100.523zNaNNaN200.0 pandas.Dataframe.convert_dtypes

自动将object类型转换为合适的类型。

dfn = df.convert_dtypes()
dfn.dtypes
a      Int32
b     string
c    boolean
d     string
e      Int64
f    float64
dtype: object
df->array(df.values)
df.values
array([[1, 'x', True, 'h', 10, nan],
       [2, 'y', False, 'i', 1, 100.5],
       [3, 'z', nan, nan, 20, 200.0]], dtype=object)
3 df 索引
df = pd.Dataframe([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
                  index=[4, 5, 6], columns=['A', 'B', 'C'])
df
ABC402350416102030 df.at

与loc类似,都是基于index的标签来进行,就是index的具体值

df.at[4,'B']
2
df.loc
# 通过标签访问 一组行/列数据
df.loc[4]
df.loc[4:5]  # 等价于 df.loc[[4,5] 
df.loc[[4,5],['A','B']]
AB402501
# 按照列数据筛选子集
df.loc[df['B']>3,['B','C']]
ABC4023501161011 df.iat

就是根据index来索引,而不是index的标签值

df.iat[1,2]
1
df.iloc

基于index进行,行和列都是只能使用index,可以提前根据column名提取,在进行iloc

df[['B','C']].iloc[0]
B    2
C    3
Name: 4, dtype: int64
根据索引结果进行修改

在查找的基础上,后接=value进行修改

例如:

df.loc[df['B']>3,['B','C']] = 100
df
ABC402350100100610100100 4 df切片
index = ['Ohio','Colorado','Utah','New York']
column = ['one','two','three','four']
df = pd.Dataframe(np.arange(16).reshape(4,4),index=index,columns=column)
df
onetwothreefourOhio0123Colorado4567Utah891011New York12131415 选取某一列

3种方法

df['one']
df.one
df.iloc[:,0]
Ohio         0
Colorado     4
Utah         8
New York    12
Name: one, dtype: int32
选某几列
df[['one','two']]
df.iloc[:,:2]
onetwoOhio01Colorado45Utah89New York1213 选某一行
df.iloc[0:1]
onetwothreefourOhio0123
df.iloc[0]
one      0
two      1
three    2
four     3
Name: Ohio, dtype: int32
df.loc['Ohio']
one      0
two      1
three    2
four     3
Name: Ohio, dtype: int32
选某几行
df.iloc[0:2]
onetwothreefourOhio0123Colorado4567
df.iloc[[1,3]]
onetwothreefourColorado4567New York12131415
df.loc[['Colorado','New York']]
onetwothreefourColorado4567New York12131415 多行多列
df.iloc[0:3,[0,2]]
onethreeOhio02Colorado46Utah810
df.loc[['Ohio','Utah'],['one','three']]
onethreeOhio02Utah810 5 删除 5.1 删除列
df.drop(['one'],axis = 1)  # axis =1 就是列,axis = 0就是行
# df.drop(columns=['one'])
twothreefourOhio123Colorado567Utah91011New York131415 5.2 删除行
df.drop(['Ohio'],axis = 0)  # 此时 axis可以隐藏不写
onetwothreefourColorado4567Utah891011New York12131415 6 填充
df = pd.Dataframe([[np.nan, 2, np.nan, 0],
                   [3, 4, np.nan, 1],
                   [np.nan, np.nan, np.nan, 5],
                   [np.nan, 3, np.nan, 4]],
                  columns=list("ABCD"))

df
ABCD0NaN2.0NaN013.04.0NaN12NaNNaNNaN53NaN3.0NaN4 fillna

对空值nan进行填充

df.fillna(0)
# 也可以对不同列使用不同的填充
values = {"A": 0, "B": 1, "C": 2, "D": 3}
df.fillna(value=values)

# 限制第一个空值填充
df.fillna(value=values, limit=1)
ABCD00.02.02.0013.04.0NaN12NaN1.0NaN53NaN3.0NaN4
					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5625367.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存