Pythonを一から勉強してデータ分析できるようになる

~ Pythonとデータ分析のお勉強の記録 ~

データフレーム間の編集

[Take0] 空のデータフレームに、別データフレームの特定列データを追加する

 

【書式】

空データフレームの作成 : df=pd.DataFrame()
列データの追加 : df["列名"]=列データ

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
dfB=pd.DataFrame()
dfB["国語"]=dfA["国語"]
dfB

 

【結果】

 

 

[Take1] 空のデータフレームに、別データフレームの特定行データを追加する

 

【書式】

行データの追加 : df.append(行データ)

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
dfB=pd.DataFrame()
dfB=dfB.append(dfA.iloc[0])
 
dfB

 

【結果】

AttributeError Traceback (most recent call last)
in ()
3
4 dfB=pd.DataFrame()
----> 5 dfB=dfB.append(dfA.iloc[0])
6
7 dfB
 
/usr/local/lib/python3.10/dist-packages/pandas/core/generic.py in __getattr__(self, name)
5987 ):
5988 return self[name]
-> 5989 return object.__getattribute__(self, name)
5990
5991 def __setattr__(self, name: str, value) -> None:
 
AttributeError: 'DataFrame' object has no attribute 'append'

 

エラー・・・・・・

2022/1/22にリリースされたpandas 1.4.0にて、DataFrame型、Series型で提供されているappendメソッドが非推奨となりました。らしい。

代わりに推奨されているconcatで流してみる。

 

[Take1-1] 空のデータフレームに、別データフレームの特定行データを追加する

 

【書式】

dfB=pd.concat([dfB,dfA.iloc[0]])

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
dfB=pd.DataFrame()
dfB=pd.concat([dfB,dfA.iloc[0]])
 
print(dfB)
print(dfB.index)

 

【結果】

0
国語 1
数学 2
理科 3
学生番号 A01
Index(['国語', '数学', '理科', '学生番号'], dtype='object')

 

 

[Take1-2] 全データを追加するパターンを描いておく

 

【書式】

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
dfB=pd.DataFrame()
dfB=pd.concat([dfB,dfA])
 
print(dfB)
print(dfB.index)

 

【結果】

国語 数学 理科 学生番号
名前
一郎 1 2 3 A01
二郎 4 5 6 B02
三郎 7 8 9 C01
四郎 10 11 12 A02
五郎 13 14 15 A03
六郎 16 17 18 C02
Index(['一郎', '二郎', '三郎', '四郎', '五郎', '六郎'], dtype='object', name='名前')

 

 

[Take2] 列データを削除する

 

【書式】

df.drop("列名",axis=1)

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
# 国語列を削除する
dfA=dfA.drop("国語",axis=1)
 

 

【結果】

 

 

[Take3] 行データを削除する

 

【書式】

df.drop("行名")

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
# 二郎(2行目)を削除する
dfA=dfA.drop(dfA.index[1])
 
print(dfA)
print("dfA.index[1]のデータ形式",type(dfA.index[1]))

 

【結果】

国語 数学 理科 学生番号
名前
一郎 1 2 3 A01
三郎 7 8 9 C01
四郎 10 11 12 A02
五郎 13 14 15 A03
六郎 16 17 18 C02
dfA.index[1]のデータ形式 <class 'str'>

 

 

[Take4] 特定条件の列データを条件検索する

 

【書式】

df["列名"]=値

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
# 国語が10点以上のデータを抽出する
print(dfA["国語"]>10)
 
print(type(dfA["国語"]>10))

 

【結果】

名前
一郎 False
二郎 False
三郎 False
四郎 False
五郎 True
六郎 True
Name: 国語, dtype: bool
<class 'pandas.core.series.Series'>

 

条件に合致汁ものだけが抽出される仕組みらしい。この場合、五郎と六郎のデータが抽出されることになりそう。

 

[Take5] 特定条件の列データを抽出する

 

【書式】

df=df[条件]
この条件が、TAKE4 における「dfA["国語"]>10」になる。

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
dfB=dfA[dfA["国語"]>10]
 
print(dfB)

 

【結果】

国語 数学 理科 学生番号
名前
五郎 13 14 15 A03
六郎 16 17 18 C02

 

 

[Take5] 特定条件(複数)の列データを抽出する

 

【書式】

 

【コード】

import pandas as pd
dfA=pd.read_csv("/content/drive/MyDrive/Python_2024/002/test.csv",encoding="Shift-JIS",index_col=0)
 
dfB=dfA[(dfA["国語"]>10) & (dfA["数学"]>14)]
 
print(dfB)

 

【結果】

国語 数学 理科 学生番号
名前
六郎 16 17 18 C02