pandas 提高代码的时间效率,使用Python处理大数据集

tzcvj98z  于 2023-02-27  发布在  Python
关注(0)|答案(2)|浏览(121)

我正在尝试优化我的代码,以减少运行数据集所需的时间。
我正在使用一个.csv文件,其中有三列:time_UTCvmag 2Dvdir。数据集约为1420000行(一百四十二万行)。
在我的Mac电脑上运行这个周期需要15/20分钟,我敢肯定我把一些复杂的东西花了这么多时间。(我相信处理器足够好,可以更快地运行这段代码)。

import pandas as pd

path_data = '" *insert a path here* "'
file = path_data + ' *name of the .csv file* '

data = pd.read_csv(file)

time_UTC = []
vmag2D = []
vdir = []

for i in range(len(data)):
    x = data.iloc[i][0]
    x1 = x.split(' ')
    x2 = x1[1].split(';')
    date = x.split(' ')[0]
    time_UTC.append(x2[0])
    vmag2D.append(x2[1])
    vdir.append(x2[2])

代码解析.csv文件中的每一行,每一行都有相同的“模板”:* '一九九四年一月一日零时零五分;0.52; 193英尺*

ycl3bljg

ycl3bljg1#

你的代码不需要使用任何类型的for循环,你正在使用panda阅读CSV,但是你似乎没有指定正确的参数。

import pandas as pd

path_data = '" *insert a path here* "'
file = path_data + ' *name of the .csv file* '

df = pd.read_csv(file, sep=';', parse_dates=[0], engine='c', header=None)

time_UTC = df.iloc[:, 0]
vmag2D = df.iloc[:, 1]
vdir = df.iloc[:, 2]

如果你运行这个函数,你得到的变量(time_UTC,...)将是pandas.Series类型,你可以用.to_list()把它们转换成list,或者用.values访问numpy数组。
注意,我在panda CSV解析器中指定了engine='c',它使用的是原生的C解析器,比Python解析器更快,因为这里处理的是一个大文件。

vdzxcuhz

vdzxcuhz2#

您可以一次拆分整列

import pandas as pd
import numpy as np

df = pd.DataFrame({"all": ["1994-01-01 00:05:00;0.52;193"]*1000})

# split at space " "
df[["date", "time vmag vdir"]] = df["all"].str.split(" ", expand=True)

# split at ";"
df[["time", "vmag2D", "vdir"]] = df['time vmag vdir'].str.split(';', expand=True)

date = pd.to_datetime(df["date"]).to_list()
time_UTC = pd.to_datetime(df["time"]).to_list()
vmag2D = pd.to_numeric(df["vmag2D"]).to_list()
vdir = pd.to_numeric(df["vdir"]).to_list()

相关问题