Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonPandasでテンプレートを使用してDataFrameに新しい行を追加する方法


PythonPandasでテンプレートを使用してDataFrameに新しい行を追加する方法。

はじめに

データエンジニアリングのスペシャリストである私は、分析のためにデータを作成して送信する役割は他のデータベーススペシャリストの面倒を見る必要があるため、行よりも多くの派生列を作成することになります。ただし、それは常に真実ではありません。

データスペシャリストチームからデータが送信されるのを待つのではなく、サンプル行を作成する必要があります。このトピックでは、行を作成するための巧妙なトリックを紹介します。

その方法..

このレシピでは、最初に.loc属性を使用して小さなデータセットに行を追加し、次に.appendメソッドを使用します。

1.後で行を追加するためのデータフレームを作成することから始めましょう。

import pandas as pd
import numpy as np

players_info = pd.DataFrame(data=[
{"players": "Roger Federer", "titles": 20},
{"players": "Rafael Nadal", "titles": 20},
{"players": "Novak Djokovic", "titles": 17},
{"players": "Andy Murray", "titles": 3}], columns=["players", "titles"])

出力

print(players_info.info())

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 players 4 non-null object
1 titles 4 non-null int64
dtypes: int64(1), object(1)
memory usage: 192.0+ bytes
None

1.次に、.loc属性を使用して新しいプレーヤー「DominicTheim」をデータフレームに追加しましょう。

new_Player = ['Dominic Theim', 1]
players_info.loc[4] = new_Player

出力

print(players_info)


players titles
0 Roger Federer 20
1 Rafael Nadal 20
2 Novak Djokovic 17
3 Andy Murray 3
4 Dominic Theim 1

1.同じ.loc属性を使用して、データフレームの最後に新しい行を追加しましょう。ここでは、データフレームに辞書を追加する方法を示します。

new_player = {'players': 'Daniel Medvedev', 'titles': 0}
players_info.loc[len(players_info)] = new_player

出力

print(players_info)


players titles
0 Roger Federer 20
1 Rafael Nadal 20
2 Novak Djokovic 17
3 Andy Murray 3
4 Dominic Theim 1
5 Daniel Medvedev 0

1.データを保持するパンダシリーズをデータフレームに追加することもできます。

players_info.loc[len(players_info)] = pd.Series({'players': 'Andy Zverev', 'titles': 0})

出力

print(players_info)
players titles
0 Roger Federer 20
1 Rafael Nadal 20
2 Novak Djokovic 17
3 Andy Murray 3
4 Dominic Theim 1
5 Daniel Medvedev 0
6 Andy Zverev 0

結論

.locメソッドを使用して上記の4つのステップでデータを追加しました。 .loc属性は、その場でDataFrameに変更を加えます。

次のいくつかの手順では、呼び出し元のDataFrameを変更せず、行が追加されたDataFrameの新しいコピーを返す.appendメソッドを確認します。

.appendの最初の引数は、別のDataFrame、Series、ディクショナリ、またはリストのいずれかである必要があります。

# Create a DataFrame with index
players_info = pd.DataFrame(data=[
{"players": "Roger Federer", "titles": 20},
{"players": "Rafael Nadal", "titles": 20},
{"players": "Novak Djokovic", "titles": 17},
{"players": "Andy Murray", "titles": 3}], columns=["players", "titles"],
index=["roger", "nadal", "djokovic", "murray"])


# Add a new row(dictionary) to DataFrame using .append method.
players_info.append({'players': 'Daniel Medvedev', 'titles': 0})
を使用して、DataFrameに新しい行(辞書)を追加します。


---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
1 # Add a new row(dictionary) to DataFrame using .append method.
----> 2 players_info.append({'players': 'Daniel Medvedev', 'titles': 0})

~\anaconda3\lib\site-packages\pandas\core\frame.py in append(self, other, ignore_index, verify_integrity, sort)
7046 other = Series(other)
7047 if other.name is None and not ignore_index:
-> 7048 raise TypeError(
7049 "Can only append a Series if ignore_index=True "
7050 "or if the Series has a name"

TypeErrorは、ignore_index =Trueの場合、またはシリーズに名前がある場合にのみシリーズを追加できます

辞書を追加しようとすると、パラメータignore_index =Trueを使用するように求める例外が発生しました。そこで、この提案されたパラメータを追加して、その機能を確認します。

new_df = players_info.append({'players': 'Daniel Medvedev', 'titles': 0}, ignore_index=True)

出力

print(f" *** Original with index \n {players_info} \n\n\n *** Modified index \n {new_df}")


*** Original with index
players titles
roger Roger Federer 20
nadal Rafael Nadal 20
djokovic Novak Djokovic 17
murray Andy Murray 3

*** Modified index
players titles
0 Roger Federer 20
1 Rafael Nadal 20
2 Novak Djokovic 17
3 Andy Murray 3
4 Daniel Medvedev 0

ignore_index =Trueパラメーターを使用した後、出力から何を観察しましたか?はい、ignore_indexをTrueに設定すると、古いインデックスは完全に削除され、0からn-1までのRangeIndexに置き換えられます。

.appendメソッドは、一度に多数の行をDataFrameに追加する場合に非常に便利です。

player1 = pd.Series({'players': 'Andy Zverev', 'titles': 0}, name='zverev')
player2 = pd.Series({'players': 'Dominic Theim', 'titles': 1}, name='theim')
new_df_1 = players_info.append([player1, player2])

出力

print(new_df_1)
players titles
roger Roger Federer 20
nadal Rafael Nadal 20
djokovic Novak Djokovic 17
murray Andy Murray 3
zverev Andy Zverev 0
theim Dominic Theim 1

さて、行を追加する方法の基本を理解したので、多くの列を持つデータフレームに行を追加する方法について詳しく説明します。

df = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")

出力

print(df.info())

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4803 entries, 0 to 4802
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 budget 4803 non-null int64
1 id 4803 non-null int64
2 original_language 4803 non-null object
3 original_title 4803 non-null object
4 popularity 4803 non-null float64
5 release_date 4802 non-null object
6 revenue 4803 non-null int64
7 runtime 4801 non-null float64
8 status 4803 non-null object
9 title 4803 non-null object
10 vote_average 4803 non-null float64
11 vote_count 4803 non-null int64
dtypes: float64(3), int64(4), object(5)
memory usage: 450.4+ KB
None

Googleのこのデータセットには12個の列があり、新しい行のデータを手動で入力した場合、列名を誤って入力したり、1つを完全に忘れたりするのは非常に簡単です。では、どうすればこの問題を回避できますか?列名のテンプレートを作成するだけの方法があります。

columns_dictionary = df.iloc[0].to_dict()
##### Output:


print(columns_dictionary)


{'budget': 237000000, 'id': 19995, 'original_language': 'en', 'original_title': 'Avatar', 'popularity': 150.437577, 'release_date': '10/12/2009', 'revenue': 2787965087, 'runtime': 162.0, 'status': 'Released', 'title': 'Avatar', 'vote_average': 7.2, 'vote_count': 11800}

これで、最初の行を取得して辞書に変換したことを理解できます。列と値も取得しました。辞書の理解度を使用して古い値をクリアし、前の文字列値を空の文字列として割り当てます。およびその他すべての値が欠落しています。

この辞書は、入力したい新しいデータのテンプレートとして使用できるようになりました。

import datetime

new_data_dict = {}
for a, b in columns_dictionary.items():
if isinstance(b, str):
new_data_dict[a] = np.random.choice(list('abcde'))
elif isinstance(b, datetime.date):
new_data_dict[a] = np.nan
else:
new_data_dict[a] = np.nan

出力

print(new_data_dict)


{'budget': nan, 'id': nan, 'original_language': 'e', 'original_title': 'a', 'popularity': nan, 'release_date': 'b', 'revenue': nan, 'runtime': nan, 'status': 'e', 'title': 'c', 'vote_average': nan, 'vote_count': nan}

  1. Python-パンダのデータフレームをCSVファイルに書き込む方法

    pandasデータフレームをPythonでCSVファイルに書き込むには、 to_csv()を使用します 方法。まず、リストの辞書を作成しましょう- # dictionary of lists d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],'Date_of_purchase': ['2020-10-10', '2020-10-12', '

  2. Python-PandasDataFrameからnull行を削除する方法

    Pandas DataFrameのnull行を削除するには、dropna()メソッドを使用します。以下が、いくつかのNaN、つまりnull値を含むCSVファイルであるとしましょう- read_csv()を使用してCSVファイルを読み取ってみましょう。 CSVはデスクトップにあります- dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\CarRecords.csv") dropna()-を使用してnull値を削除します dataFrame = dataFrame.dropna() 例 以下は完全なコードです-