对于我的应用程序,我需要读取每个15 M行的多个文件,将它们存储在DataFrame中,然后以HDFS5格式保存DataFrame。
我已经尝试了不同的方法,特别是punks.read_csv(具有chunksize和dtype规范)和dask.dataframe。它们都需要大约90秒才能处理1个文件,因此我想知道是否有一种方法可以按所述方式有效处理这些文件。在下面的代码中,我展示了一些我已经完成的测试代码。
import pandas as pd
import dask.dataframe as dd
import numpy as np
import re
# First approach
store = pd.HDFStore('files_DFs.h5')
chunk_size = 1e6
df_chunk = pd.read_csv(file,
sep="\t",
chunksize=chunk_size,
usecols=['a', 'b'],
converters={"a": lambda x: np.float32(re.sub(r"[^\d.]", "", x)),\
"b": lambda x: np.float32(re.sub(r"[^\d.]", "", x))},
skiprows=15
)
chunk_list = []
for chunk in df_chunk:
chunk_list.append(chunk)
df = pd.concat(chunk_list, ignore_index=True)
store[dfname] = df
store.close()
# Second approach
df = dd.read_csv(
file,
sep="\t",
usecols=['a', 'b'],
converters={"a": lambda x: np.float32(re.sub(r"[^\d.]", "", x)),\
"b": …Run Code Online (Sandbox Code Playgroud) 我在此页面中找到了以下代码来计算二重积分。每当我在所有变量都声明为 的情况下运行它时float,它都会给出示例积分的正确结果,即 3.91905。但是,如果我只是将所有float变量更改为double,则程序会针对该积分给出完全错误的结果 ( 2.461486)。
你能帮我理解为什么会发生这种情况吗?我希望使用精度能得到更好的结果double,但这里的情况显然并非如此。
以下是从上述网站粘贴的代码。
// C++ program to calculate
// double integral value
#include <bits/stdc++.h>
using namespace std;
// Change the function according to your need
float givenFunction(float x, float y)
{
return pow(pow(x, 4) + pow(y, 5), 0.5);
}
// Function to find the double integral value
float doubleIntegral(float h, float k,
float lx, float ux,
float ly, float uy)
{
int nx, ny;
// …Run Code Online (Sandbox Code Playgroud)