re.compile()。split()を使用してデータフレームの行をループします

シェーカー

1列と複数行で構成されるデータフレームがあります。これらの各行は同じ方法で作成されます。-timestamp-value1value2value3 -timestamp- value 4 value5 value6 .. ..

タイムスタンプの形式は次のとおりです。YYYY-MM-DD HH:MM:SS値は小数点以下2桁の数値です。1つの行に個々のタイムスタンプがあり、次の行に関連する値がある新しいデータフレームを作成したいと思います。

正規表現を使用してラインごとに期待される結果を得ることができましたが、データフレーム全体では得られませんでした。

これまでの私のコード:

#input dataframe
data.head()

                  values
0   2020-05-12 10:00:00 12.07 13 11.56 ... 2020-05-12 10:00:01 11.49 17 5.67...
1   2020-05-12 10:01:00 11.49 17 5.67 ... 2020-05-12 10:01:01 12.07 13 11.56...
2   2020-05-12 10:02:00 14.29 18 11.28 ... 2020-05-12 10:02:01 13.77 18 7.43...


test = data['values'].iloc[0] #first row of data
row1 = re.compile("(\d\d\d\d\S\d\d\S\d\d\s\d\d\S\d\d\S\d\d)").split(test)
df_row1 = pd.DataFrame(row1)

df_row1.head()

             values 
0   2020-05-12 10:00:00
1   12.07 13.79 15.45 17.17 18.91 14.91 12.35 14....
2   2020-05-12 10:00:01
3   12.48 13.96 13.88 15.57 18.46 15.0 13.65 14.6...

#trying the same for the entire dataframe 
for row in data:
    df_new = re.compile("(\d\d\d\d\S\d\d\S\d\d\s\d\d\S\d\d\S\d\d)").split(row)

print(df_new)
['values']

私の質問は、データフレームの行をループして期待される結果を得るにはどうすればよいですか?

JQadrad

最初に行を分割して値を列に抽出する場合は、を使用できることに注意してくださいstr.extract正規表現で名前付きグループを使用すると、データフレームの列が自動的に割り当てられます

split_line = r"\s+(?=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})"
extract_values = r"(?P<date>\d{4}-\d{2}-\d{2})\s(?P<time>\d{2}:\d{2}:\d{2})\s(?P<value_one>.*?)\s(?P<value_two>.*?)\s(?P<value_three>.*?)$"

df = pd.DataFrame([{
    "value": "2020-05-12 10:00:00 12.07 13 11.56 2020-06-12 11:00:00 13.07 16 11.16 2020-05-12 10:00:01 11.49 17 5.67", 
},{
    "value": "2020-05-13 10:00:00 14.07 13 15.56 2020-05-16 10:00:02 11.51 18 5.69", 
}])
df = df["value"].str.split(split_line).explode().str.extract(extract_values, expand=True)
print(df)
#          date      time value_one value_two value_three
# 0  2020-05-12  10:00:00     12.07        13       11.56
# 0  2020-06-12  11:00:00     13.07        16       11.16
# 0  2020-05-12  10:00:01     11.49        17        5.67
# 1  2020-05-13  10:00:00     14.07        13       15.56
# 1  2020-05-16  10:00:02     11.51        18        5.69

split正規表現ではなく、使用日時以降のグループ数がわからない場合私はこのようなものを提案します:

split_line = r"\s+(?=\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})"

df = pd.DataFrame([{
    "value": "2020-05-12 10:00:00 12.07 13 11.56 2020-06-12 11:00:00 13.07 16 11.16 2020-05-12 10:00:01 11.49 17 5.67", 
},{
    "value": "2020-05-13 10:00:00 14.07 13 14 15 15.56 2020-05-16 10:00:02 11.51 18 5.69", 
}])
df = df["value"].str.split(split_line).explode().reset_index()

df = df['value'].str.split(" ").apply(pd.Series)
df.columns = [f"col_{col}" for col in df.columns]
print(df)
#         col_0     col_1  col_2 col_3  col_4 col_5  col_6
# 0  2020-05-12  10:00:00  12.07    13  11.56   NaN    NaN
# 1  2020-06-12  11:00:00  13.07    16  11.16   NaN    NaN
# 2  2020-05-12  10:00:01  11.49    17   5.67   NaN    NaN
# 3  2020-05-13  10:00:00  14.07    13     14    15  15.56
# 4  2020-05-16  10:00:02  11.51    18   5.69   NaN    NaN

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

reを使用して.pgn(文字列行)からデータフレームを構築します

分類Dev

行末までre.search()を実行し、データフレームを更新します

分類Dev

データフレームでre.split()を繰り返す

分類Dev

re.findallを使用して、角かっこなしでデータフレームに新しい列を作成します

分類Dev

forループ内でre.compileを使用して部分文字列インデックスを抽出する方法

分類Dev

re.splitを使用して式を分割し、デリメータを保持します/角かっこを使用します

分類Dev

jQueryを拡張して、ビューポートの外部にカスタムフィルターre要素を作成します

分類Dev

Pythonのreモジュールを使用して特定のパターンマッチングを実行しようとしています

分類Dev

モジュールreを使用してデータフレームの列から特別な文字を削除するにはどうすればよいですか?

分類Dev

applyを使用して、Pandasデータフレーム行にデータのタプルを入力します

分類Dev

内部検索を使用したstring.split()ループと同等のre.findall()

分類Dev

データフレームの行をループして、rの関数入力として使用します

分類Dev

dplyrを使用して、データフレームの各グループの先頭に行を追加します

分類Dev

Pythonでre.subを使用してインプレース置換を行うことができません

分類Dev

re.compile を使用した英語以外のユニコード フレーズによる正規表現

分類Dev

Pythonとreライブラリを使用してvcfファイルデータを読み取る

分類Dev

パンダデータフレームにreを適用する

分類Dev

re()を使用して、scrapyを使用してjavascript変数からデータを抽出する方法は?

分類Dev

Rでforループを使用して、データフレームの名前をループします

分類Dev

forループを使用して複数のパンダデータフレームを追加しますが、空のデータフレームを返します

分類Dev

列をグループ化してパンダデータフレームの行をマージします

分類Dev

すべての入力データに加えて、re.findall()をCSVに出力します

分類Dev

データフレーム内のすべての行をグループ化して減算します

分類Dev

BeautifulSoupを使用してテーブルの行を抽出し、Pandasデータフレームと同期します

分類Dev

forループ-> N / A値を使用して、古いデータフレーム行から新しいデータフレーム列を作成します

分類Dev

re.sub()を使用して、一致したパターンからスペースを削除します

分類Dev

re.sub?を使用して複数の機密データをマスクする

分類Dev

ループトラフデータフレームの行を更新します

分類Dev

ggplotを使用してデータフレームのすべての行をプロットします

Related 関連記事

  1. 1

    reを使用して.pgn(文字列行)からデータフレームを構築します

  2. 2

    行末までre.search()を実行し、データフレームを更新します

  3. 3

    データフレームでre.split()を繰り返す

  4. 4

    re.findallを使用して、角かっこなしでデータフレームに新しい列を作成します

  5. 5

    forループ内でre.compileを使用して部分文字列インデックスを抽出する方法

  6. 6

    re.splitを使用して式を分割し、デリメータを保持します/角かっこを使用します

  7. 7

    jQueryを拡張して、ビューポートの外部にカスタムフィルターre要素を作成します

  8. 8

    Pythonのreモジュールを使用して特定のパターンマッチングを実行しようとしています

  9. 9

    モジュールreを使用してデータフレームの列から特別な文字を削除するにはどうすればよいですか?

  10. 10

    applyを使用して、Pandasデータフレーム行にデータのタプルを入力します

  11. 11

    内部検索を使用したstring.split()ループと同等のre.findall()

  12. 12

    データフレームの行をループして、rの関数入力として使用します

  13. 13

    dplyrを使用して、データフレームの各グループの先頭に行を追加します

  14. 14

    Pythonでre.subを使用してインプレース置換を行うことができません

  15. 15

    re.compile を使用した英語以外のユニコード フレーズによる正規表現

  16. 16

    Pythonとreライブラリを使用してvcfファイルデータを読み取る

  17. 17

    パンダデータフレームにreを適用する

  18. 18

    re()を使用して、scrapyを使用してjavascript変数からデータを抽出する方法は?

  19. 19

    Rでforループを使用して、データフレームの名前をループします

  20. 20

    forループを使用して複数のパンダデータフレームを追加しますが、空のデータフレームを返します

  21. 21

    列をグループ化してパンダデータフレームの行をマージします

  22. 22

    すべての入力データに加えて、re.findall()をCSVに出力します

  23. 23

    データフレーム内のすべての行をグループ化して減算します

  24. 24

    BeautifulSoupを使用してテーブルの行を抽出し、Pandasデータフレームと同期します

  25. 25

    forループ-> N / A値を使用して、古いデータフレーム行から新しいデータフレーム列を作成します

  26. 26

    re.sub()を使用して、一致したパターンからスペースを削除します

  27. 27

    re.sub?を使用して複数の機密データをマスクする

  28. 28

    ループトラフデータフレームの行を更新します

  29. 29

    ggplotを使用してデータフレームのすべての行をプロットします

ホットタグ

アーカイブ