Pandas的学习(4.DataFrame之间的运算以及DataFrame和Series之间的运算)
生活随笔
收集整理的這篇文章主要介紹了
Pandas的学习(4.DataFrame之间的运算以及DataFrame和Series之间的运算)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DataFrame的運算
? ?1.DataFrame之間的運算
? ? ?同Series一樣:
? ? ? ? ? ? ? ?---? ?在運算中自動對齊不同索引的數據
? ? ? ? ? ? ? ?---? 如果索引不對應,則補NaN
? ? 無論是行不對應還是列不對應,都會補充NaN值
from pandas import DataFrame import numpy as np# 創建連個DataFrame # df1:成績表一 df1 = DataFrame(np.random.randint(0, 150, size=(4, 4)),index=['張三', '李四', '王五', '小明'],columns=['語文', '數學', '英語', 'Python']) # df2:成績表二(相對于df1時,多加了一個人) df2 = DataFrame(np.random.randint(0, 150, size=(5, 4)),index=['張三', '李四', '王五', '小明', '小張'],columns=['語文', '數學', '英語', 'Python']) # 兩個成績相加 print(df1 + df2) """語文 數學 英語 Python 小張 NaN NaN NaN NaN 小明 132.0 129.0 135.0 171.0 張三 13.0 91.0 75.0 127.0 李四 239.0 56.0 242.0 27.0 王五 143.0 124.0 108.0 226.0 """ # 使用add() 為了避免加起來有NaN的值 fill_value=True df3 = df1.add(df2, fill_value=0) print(df3) """ # 就沒有NaN值了語文 數學 英語 Python 小張 129.0 127.0 105.0 62.0 小明 238.0 146.0 81.0 80.0 張三 206.0 114.0 226.0 156.0 李四 167.0 252.0 279.0 180.0 王五 174.0 180.0 159.0 201.0 """還有一些其他的運算方法,都有其對應的函數
?2.Series與DataFrame之間的運算
?--- 使用Python操作符:以行為單位操作(參數必須是行),對所有行都有效。(類似于numpy中二維數組與一維數組的運算,但可能出現NaN)
--- 使用pandas操作函數:
? ? ? ? ? axis=0:以列為單位操作(參數必須是列),對所有列都有效。
? ? ? ? ? axis=1:以行為單位操作(參數必須是行),對所有列都有效。
#? 注意注釋部分的解釋
# Series 和 DataFrame 之間的運算 df3 = DataFrame(np.random.randint(0, 150, size=(5, 4)),index=['張三', '李四', '王五', '小明', '小張'],columns=['語文', '數學', '英語', 'Python']) # 提取一列 s1 = df3['Python'] # 提取后是Series類型,是列數據 print(s1) """ 張三 128 李四 29 王五 105 小明 147 小張 33 Name: Python, dtype: int32 """ # 然后使用運算符直接相加 print(df3 + s1) """ # 明顯是有問題的Python 小張 小明 張三 數學 李四 王五 英語 語文 張三 NaN NaN NaN NaN NaN NaN NaN NaN NaN 李四 NaN NaN NaN NaN NaN NaN NaN NaN NaN 王五 NaN NaN NaN NaN NaN NaN NaN NaN NaN 小明 NaN NaN NaN NaN NaN NaN NaN NaN NaN 小張 NaN NaN NaN NaN NaN NaN NaN NaN NaN """'''loc的用法,取出一行的數據''' s2 = df3.loc['小明'] print(s2) """ 語文 120 數學 96 英語 101 Python 30 Name: 小明, dtype: int32 """'''直接加的,會有類似于廣播機制的問題,就是說,取出來的這樣一行,給df3的每行都會加 ''' print(df3 + s2) """語文 數學 英語 Python 張三 258 168 154 76 李四 219 184 221 179 王五 163 122 142 179 小明 240 192 202 60 小張 174 181 132 173 """'''想要避免NaN值,使用pandas提供的函數''' df4 = DataFrame(np.random.randint(0, 150, size=(5, 4)),index=['張三', '李四', '王五', '小明', '小張'],columns=['語文', '數學', '英語', 'Python']) print(df4) """語文 數學 英語 Python 張三 49 69 19 77 李四 0 37 64 70 王五 39 11 108 34 小明 53 18 121 0 小張 20 113 37 127 """ s3 = df4.Python # 取出列 # axis=0 以列為單位操作,取出的什么就以什么為單位 # 把取出來的數據給df的每列進行相加 print(df4.add(s3, axis=0)) """語文 數學 英語 Python 張三 126 146 96 154 李四 70 107 134 140 王五 73 45 142 68 小明 53 18 121 0 小張 147 240 164 254 """ s4 = df4.loc['小明'] # 取出行 # axis=1 以行為單位操作,取出的什么就以什么為單位 # 把取出來的數據給df的每行進行相加 print(df4.add(s4, axis=1)) """語文 數學 英語 Python 張三 102 87 140 77 李四 53 55 185 70 王五 92 29 229 34 小明 106 36 242 0 小張 73 131 158 127 """總結
以上是生活随笔為你收集整理的Pandas的学习(4.DataFrame之间的运算以及DataFrame和Series之间的运算)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matplotlib的画图的补充(Mat
- 下一篇: Pandas的学习(5.pandas中处