複数の.txtファイルがあります。それらをインポートして結合し、を使用してPythonデータフレームを形成しました
all_files = glob.glob(os.path.join(path, "*.txt"))
np_array_list = []
for file in all_files:
df = pd.read_table(file, index_col = None, header = 0)
np_array_list.append(df.as_matrix())
comb_np_array = np.vstack(np_array_list)
big_frame = pd.DataFrame(comb_np_array)
約20個のファイルをインポートしてデータフレームを形成するのに約19秒かかります。それを行うためのより速い方法はありますか?
次に、データフレームが形成されると、約800万行が含まれます。5列目の値の基準を使用して行をフィルタリングする必要があります
「長さが12で、「26」で始まる値」
私は次のコードでそれを達成しています。
big_frame.columns = ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight"]
big_frame['Five'] = big_frame['Five'].astype('str')
mask = (big_frame['Five'].str.len() == 12) & (big_frame['Five'].str.startswith('26'))
big_frame = big_frame.loc[mask]
私の基準に一致するすべての値を除外するには、FOREVERが必要です。.txtファイルを1つだけ使用してコードを検証しました。それは〜3秒ですべての処理を行います。
しかし、私はすべてのファイルをできるだけ速く処理する必要があります。それを行うためのより良い方法はありますか?
考えられる解決策の1つは、最初にフィルターをかけ、次にconcat
一緒にすることですが、パフォーマンスは実際のデータに依存します。
all_files = glob.glob(os.path.join(path, "*.txt"))
dfs = []
for file in all_files:
df = pd.read_csv(file, index_col = None, header = 0)
df.columns = ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight"]
mask = (df['Five'].str.len() == 12) & (df['Five'].str.startswith('26'))
dfs.append(df[mask])
big_frame = pd.concat(dfs, ignore_index=True)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加