pandas read_csvを使用する場合は、区切り文字を一部のタブのみに制限してください

スマイリー

read_csvを使用してタブ区切りのデータをパンダデータフレームに読み込んでいますが、列データ内にタブがあります。つまり、「\ t」を区切り文字として使用することはできません。具体的には、各行の最後のエントリは、[A-Za-z] [A-Za-z0-9]:[A-Za-z]:。+に一致するタブ区切りのオプションタグのセットです。+についての保証はありません。タグの数または存在するタグの数、およびタグの異なるセットが異なる行で発生する可能性があります。データの例は次のようになります(すべての空白は私のデータのタブです):

C42TMACXX:5:2316:15161:76101    163 1   @<@DFFADDDF:DD  NH:i:1  HI:i:1  AS:i:200    nM:i:0
C42TMACXX:5:2316:15161:76101    83  1   CCCCCACDDDCB@B  NH:i:1  HI:i:1  nM:i:1
C42TMACXX:5:1305:26011:74469    163 1   CCCFFFFFHHHHGJ  NH:i:1  HI:i:1  AS:i:200    nM:i:0

タグを1つの列として読み込むことを提案していますが、タグのコンテキストで発生するタブを除外するセパレーターの正規表現を渡すことで、これを実行できると思いました。

http://www.rexegg.com/regex-best-trick.html続いて、これについて次の正規表現を作成しました:[A-Za-z] [A-Za-z0-9]:[A-Za-z] :[^ \ t] + \ t ..:|(\ t)。オンラインの正規表現テスターでテストしましたが、セパレーターとして必要なタブとちょうど一致しているようです。

しかし、私が走るとき

df = pd.read_csv(myfile.txt, sep=r"[A-Za-z][A-Za-z0-9]:[A-Za-z]:[^\t]+\t..:|(\t)", 
                 header=None, engine="python")
print(df)

このデータに対して次の出力が得られます。

                          0       1    2   3   4   5               6   7   8 \
0  C42TMACXX:5:2316:15161:76101  \t  163  \t   1  \t  @<@DFFADDDF:DD  \t NaN   
1  C42TMACXX:5:2316:15161:76101  \t   83  \t   1  \t  CCCCCACDDDCB@B  \t NaN   
2  C42TMACXX:5:1305:26011:74469  \t  163  \t   1  \t  CCCFFFFFHHHHGJ  \t NaN   

   9    10  11      12  13    14  
0 NaN  i:1  \t     NaN NaN   i:0  
1 NaN  i:1  \t  nM:i:1 NaN  None  
2 NaN  i:1  \t     NaN NaN   i:0  

私が期待していた/欲しかったのは:

                          0        1  2               3                      4
0  C42TMACXX:5:2316:15161:76101  163  1  @<@DFFADDDF:DD  NH:i:1 HI:i:1 AS:i:200 nM:i:0   
1  C42TMACXX:5:2316:15161:76101  83   1  CCCCCACDDDCB@B  NH:i:1 HI:i:1 nM:i:1   
2  C42TMACXX:5:1305:26011:74469  163  1  CCCFFFFFHHHHGJ  NH:i:1 HI:i:1 AS:i:200 nM:i:0

どのようにそれを達成しますか?

関連する場合は、パンダ0.17.1を使用しており、実際のデータファイルは1億行以上です。

ステファン・ジャニコウ

pandasのドキュメントをざっと見てみましたが、区切り文字として使用されている正規表現ではグループを使用できないようです。

C42TMACXX:5:2316:15161:76101    163 1   @<@DFFADDDF:DD  NH:i:1  HI:i:1  AS:i:200    nM:i:0
C42TMACXX:5:2316:15161:76101    83  1   CCCCCACDDDCB@B  NH:i:1  HI:i:1  nM:i:1
C42TMACXX:5:1305:26011:74469    163 1   CCCFFFFFHHHHGJ  NH:i:1  HI:i:1  AS:i:200    nM:i:0
                              ^    ^  ^                ^           

最初の4つのタブのみを一致させる必要がありますが、グループを使用せずに一致させることはできません。

解決策は、\t先読みと後読みを使用して必要なものを分離することです。

これが機能するはずの正規表現です:

(?<=\d)\t(?=\d)|\t(?=[A-Z@<:]{14})|(?<=[A-Z@<:]{14})\t

説明

(?<=\d)\t(?=\d):タブでは、precedeed(?<=...)数字と続く(?=...)数字

=> 1番目と2番目のタブに一致

| または

\t(?=[A-Z@<:]{14}) :タブの後にセットLETTER、@、<または:に存在する14個の連続した文字が続く

=> 3番目のタブに一致

| または

(?<=[A-Z@<:]{14})\t :同じ14文字セットが前に付いたタブ

=> 4番目のタブに一致

デモ

注意

14個の連続する文字パターンでさらに多くの文字を許可する必要がある場合は、それらをセットに追加するだけです。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Pandas read_csvは、列数を変更する場合にヘッダー名を追加します

分類Dev

Python Pandas read_csvで複数の文字区切り文字を使用する

分類Dev

すべてのfloat列にpandas read_csvがfloat32を使用するように強制するにはどうすればよいですか?

分類Dev

pandas read_csv index_col = Noneが各行の終わりの区切り文字で機能しない

分類Dev

pandas read_csv index_col = Noneが各行の終わりの区切り文字で機能しない

分類Dev

pandas read_csvでこのタブ区切りファイルを読み取ると、行が失われます

分類Dev

pandas.read_csvを使用するときは、無関係なコンマを無視してください

分類Dev

列名が数字で始まる場合は、pandas列を削除してください

分類Dev

Pandas read_csvは、名前が指定されている場合、不良行の例外を発生させません

分類Dev

pandas.read_csvを使用して、1000区切り文字としてスペースを含むCSVファイルを読み取ります

分類Dev

リストに単語が含まれている場合、Pandasシリーズの文字列の一部を置き換える最速の方法

分類Dev

Python / Pandas-区切り文字が期待どおりに機能しないため、タブ付きのcsvファイルを読み取ります

分類Dev

Pandasのread_csv関数を使用する場合、いくつかのセルは全文ではなく「...」で終わります。助言がありますか?

分類Dev

Pandas自己相関プロットの使用-x軸を制限して読みやすくする方法は?

分類Dev

csvが変数として保存されている場合、どのようにpandas read_csv()メソッドを使用しますか?

分類Dev

pandasライブラリを使用してPythonで奇妙な区切り文字を含むCSVファイルをデータフレームに変換する方法

分類Dev

jupyterでpandas_gbqを使用する場合は、すべてのログを削除してください

分類Dev

Pandasでgroupbyを使用する場合は、特定の列の値を確認してください

分類Dev

pandas to_csvを使用する場合は、ヘッダーの先頭のカンマを削除してください

分類Dev

FutureWarning:pandas.util.testingは非推奨になりました。代わりに、pandas.testingのパブリックAPIの関数を使用してください

分類Dev

Pandasデータフレーム内の異なる長さのプレフィックスと一貫性のない区切り文字を持つ列値からの共通のプレフィックスによってデータをグループ化して合計します

分類Dev

.read_csvの読み取り中のif条件をPandasシリーズに統合する

分類Dev

Python + Pandasは複数のURLからJSONデータを取得して、セミコロンを区切り文字として使用して、CSVを別々の列に書き込みます

分類Dev

pandas.read_csvを使用してcsvファイルを読み取る行区切り文字としてセミコロンを削除します

分類Dev

Pandas Pythonを使用して、一部の列が同じ場合にデータが同じ場合に行をマージする方法

分類Dev

numpy genfromtxt / pandas read_csv; 引用符内のコンマは無視してください

分類Dev

Pandasは画面に正しく印刷されますが、一部のデータのみをcsvに保存します

分類Dev

Pandas: read_csv の区切り文字としての新しい行を無視する

分類Dev

pandas.read_csvを使用して、Pythonで区切り文字を含むcsvからコンテンツを読み取ります

Related 関連記事

  1. 1

    Pandas read_csvは、列数を変更する場合にヘッダー名を追加します

  2. 2

    Python Pandas read_csvで複数の文字区切り文字を使用する

  3. 3

    すべてのfloat列にpandas read_csvがfloat32を使用するように強制するにはどうすればよいですか?

  4. 4

    pandas read_csv index_col = Noneが各行の終わりの区切り文字で機能しない

  5. 5

    pandas read_csv index_col = Noneが各行の終わりの区切り文字で機能しない

  6. 6

    pandas read_csvでこのタブ区切りファイルを読み取ると、行が失われます

  7. 7

    pandas.read_csvを使用するときは、無関係なコンマを無視してください

  8. 8

    列名が数字で始まる場合は、pandas列を削除してください

  9. 9

    Pandas read_csvは、名前が指定されている場合、不良行の例外を発生させません

  10. 10

    pandas.read_csvを使用して、1000区切り文字としてスペースを含むCSVファイルを読み取ります

  11. 11

    リストに単語が含まれている場合、Pandasシリーズの文字列の一部を置き換える最速の方法

  12. 12

    Python / Pandas-区切り文字が期待どおりに機能しないため、タブ付きのcsvファイルを読み取ります

  13. 13

    Pandasのread_csv関数を使用する場合、いくつかのセルは全文ではなく「...」で終わります。助言がありますか?

  14. 14

    Pandas自己相関プロットの使用-x軸を制限して読みやすくする方法は?

  15. 15

    csvが変数として保存されている場合、どのようにpandas read_csv()メソッドを使用しますか?

  16. 16

    pandasライブラリを使用してPythonで奇妙な区切り文字を含むCSVファイルをデータフレームに変換する方法

  17. 17

    jupyterでpandas_gbqを使用する場合は、すべてのログを削除してください

  18. 18

    Pandasでgroupbyを使用する場合は、特定の列の値を確認してください

  19. 19

    pandas to_csvを使用する場合は、ヘッダーの先頭のカンマを削除してください

  20. 20

    FutureWarning:pandas.util.testingは非推奨になりました。代わりに、pandas.testingのパブリックAPIの関数を使用してください

  21. 21

    Pandasデータフレーム内の異なる長さのプレフィックスと一貫性のない区切り文字を持つ列値からの共通のプレフィックスによってデータをグループ化して合計します

  22. 22

    .read_csvの読み取り中のif条件をPandasシリーズに統合する

  23. 23

    Python + Pandasは複数のURLからJSONデータを取得して、セミコロンを区切り文字として使用して、CSVを別々の列に書き込みます

  24. 24

    pandas.read_csvを使用してcsvファイルを読み取る行区切り文字としてセミコロンを削除します

  25. 25

    Pandas Pythonを使用して、一部の列が同じ場合にデータが同じ場合に行をマージする方法

  26. 26

    numpy genfromtxt / pandas read_csv; 引用符内のコンマは無視してください

  27. 27

    Pandasは画面に正しく印刷されますが、一部のデータのみをcsvに保存します

  28. 28

    Pandas: read_csv の区切り文字としての新しい行を無視する

  29. 29

    pandas.read_csvを使用して、Pythonで区切り文字を含むcsvからコンテンツを読み取ります

ホットタグ

アーカイブ