Pandas使用记录

文章目录

  • pandas
    • pandas.DataFrame
        • dtype参数
      • DataFrame.apply()
        • 多列计算
        • 对除第一列外的其它列进行运算
      • DataFrame.itertuples()
      • DataFrame.loc()
      • DataFrame.iloc()
      • DataFrame.insert()
      • round函数
  • DBUG
    • ValueError
      • ValueError: cannot reindex from a duplicate axis
  • 参考资料

pandas

pandas中的两大数据组织方式:DataFrame、Series
numpy中的ndarry
list → \to ndarry → \to Series → \to DataFrame

pandas.DataFrame

Parameters
datandarray (structured or homogeneous), Iterable, dict, or DataFrame
数据数组(结构化的或同构的)、可迭代的、dict或DataFrame

Dict can contain Series, arrays, constants, or list-like objects.
Dict可以包含系列、数组、常量或类列表对象。

Changed in version 0.23.0: If data is a dict, column order follows insertion-order for Python 3.6 and later.
如果数据是dict,那么在Python 3.6及更高版本中,列顺序同插入顺序一致。

Changed in version 0.25.0: If data is a list of dicts, column order follows insertion-order for Python 3.6 and later.
如果数据是一个dict列表,那么在Python 3.6及以后版本中,列顺序同插入顺序一致。

index Index or array-like
Index to use for resulting frame. Will default to RangeIndex if no indexing information part of input data and no index provided.
索引用于生成的帧。如果输入数据中没有索引信息,并且没有提供索引,则默认为RangeIndex。

columns Index or array-like
Column labels to use for resulting frame. Will default to RangeIndex (0, 1, 2, …, n) if no column labels are provided.
用于生成帧的列标签。如果没有提供列标签,将默认为RangeIndex(0,1,2,…,n)。

dtypedtype, default None
Data type to force. Only a single dtype is allowed. If None, infer.
要强制的数据类型。只允许使用单个dtype。如果没有,则自动推断。

copybool, default False
Copy data from inputs. Only affects DataFrame / 2d ndarray input.
从输入复制数据。只影响DataFrame / 2d ndarray输入。

测试数据1:

df=pd.read_excel('./test_data.xlsx')
print(df.head())

D1  D5=null  D5=2  D5=8  D5=9
0  A    62231     0     0     0
1  B    24644     0     0     0
2  C      142     0     0     0
3  D     3431     0     0     0
4  E     1333     0     0     0

dtype参数

ABCDE各列中,A列元素的类型为字符型,BCDE各列的元素类型为int类型

df = pd.DataFrame(result,
                      columns=['A', 'B', 'C', 'D', 'E'],
                      dtype='float')

设置dtype='float'后BCDE各列数据类型变为float类型

DataFrame.apply()

对dataframe应用某个函数

多列计算

df['operation']=df.apply(lambda x:x['D']/(x['B']+x['C']+x['D']),axis=1)
参数axis=1,逐行对DataFrame对象应用lambda x:x['D']/(x['B']+x['C']+x['D']这个函数
计算D列除以B、C、D列的和

对除第一列外的其它列进行运算

先使用iloc()函数取得要进行计算的区域,这个区域也是DataFrame类型,在这个DataFrame对象上使用apply()函数,将计算公式应用到这个Dataframe中

df2=df.iloc[:,1:]
df.loc['Row_sum'] = df2.apply(lambda x: x.sum())

将计算结果作为新的一行插入Dataframe的末尾

          D1   D5=null     D5=2      D5=8    D5=9   sum(D5)  IsTransmission=1
0          A   62231.0      0.0       0.0     0.0   62231.0               0.0
1          B   24644.0      0.0       0.0     0.0   24644.0               0.0
2          C     142.0      0.0       0.0     0.0     142.0               0.0
3          D    3431.0      0.0       0.0     0.0    3431.0               0.0
4          E    1333.0      0.0       0.0     0.0    1333.0               0.0
............
14         O   26462.0      0.0       0.0     0.0   26462.0               0.0
15         P   75468.0      0.0       0.0     0.0   75468.0               0.0
Row_sum  NaN  639300.0  17701.0  232480.0  3049.0  892530.0               0.0

DataFrame.itertuples()

DataFrame.itertuples(self, index=True, name='Pandas')[source]
Iterate over DataFrame rows as namedtuples.
以命名元组的形式迭代DataFrame中的每一行

Parameters
index:bool, default True
If True, return the index as the first element of the tuple.
如果为True,返回元组中第一个元素的索引值

name :str or None, default “Pandas”
The name of the returned namedtuples or None to return regular tuples.
返回的namedtuples的名称,如果为None则默认为Pandas

Returns
iterator
An object to iterate over namedtuples for each row in the DataFrame with the first field possibly being the index and following fields being the column values.
一个对象,用于遍历DataFrame中的每一行的namedtuples,第一个字段可能是索引,后面的字段可能是列值。

DataFrame.loc()

根据索引提取DataFrame中的某一行/列,或某个元素
data = df.loc[df['A'] == key]取A列中值为key的列

DataFrame.iloc()

根据行数和列数提取DataFrame中的某一行、某一列
data=df.loc[x1:x2,y1:y2]提取x1行到x2行,y1列到y2列

DataFrame.insert()

DataFrame.insert(self, loc, column, value, allow_duplicates=False) → None[source]
Insert column into DataFrame at specified location.
插入一列到DataFrame的指定位置

Raises a ValueError if column is already contained in the DataFrame, unless allow_duplicates is set to True.
如果该列已经在DataFrame中则触发ValueError,如果设置allow_duplicate=True则不会触发此异常

Parameters:
loc :int
Insertion index. Must verify 0 <= loc <= len(columns).
要插入位置的索引,必须在$[0,len(columns)]$(闭区间)之间

column:str, number, or hashable object(可哈希的对象)
Label of the inserted column.
插入列的标签(列名)

value:int, Series, or array-like
allow_duplicates:bool, optional

使用
将一个Series对象插入到DataFrame的第6列中
series=pd.Series(list_1,dtype=int)
print(series.head())
0    0
1    0
2    0
3    0
4    0

df.insert(loc=5,column='IsTransmission=1',value=series)

D1  D5=null  D5=2  D5=8  D5=9  IsTransmission=1
0  A    62231     0     0     0                 0
1  B    24644     0     0     0                 0
2  C      142     0     0     0                 0
3  D     3431     0     0     0                 0
4  E     1333     0     0     0                 0

round函数

df['operation']=round(df['operation'],4)对DataFrame中的operation列的元素进行取小数点后4位操作

DBUG

ValueError

ValueError: cannot reindex from a duplicate axis

原因:索引存在重复的项
情景:一个DataFrame、一个Series,我想将Series插入到DataFrame中,触发了这个错误
方法:使用XXX.index.duplicated()方法找到重复的项,将索引修改一下,或者替换掉,或者在构造Series时使用默认索引

 print(df.index.duplicated())
 print(series.index.duplicated())

[False False False False False False False False False False False False
 False False False False]
[False False False False False False False False False False False False
 False False False False]

参考资料

pandas.DataFrame
传送门

在Pandas中更改列的数据类型【方法总结】
传送门

pandas.read_csv参数详解
传送门

DataFrame由已知列数据计算生成新列的方法
传送门

andas对DataFrame单列/多列进行运算(map, apply, transform, agg)
传送门

在dataframe添加1行(首行,或者尾部),且不覆盖
url

DataFrame对行列求和并添加新行和列
url
如何将DataFrame中除第一列之外的所有列合并为一列并删除空行?
url

pandas报错:cannot reindex from a duplicate axis
url

DataFrame数据拼接合并的几种方式
url

将一个series插入到一个dataframe任一一列中
url

谷歌浏览器(chrome)切换标签页的快捷键
url
从左往右ctrl+tab
从右往左ctrl+shift+tab
关闭标签页ctrl+w

你可能感兴趣的:(数据处理,分析,python,numpy,数据分析)