Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换列表列表中的pd.DataFrame,同时替换';np.nan';空文本的值'';_Python_Python 3.x_Pandas_Numpy - Fatal编程技术网

Python 转换列表列表中的pd.DataFrame,同时替换';np.nan';空文本的值'';

Python 转换列表列表中的pd.DataFrame,同时替换';np.nan';空文本的值'';,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我做了一个函数,可以将我的DF转换成一个列表,这样我就可以使用它与googleapi交互,这就是为什么它必须是一个列表的原因 我在这里遇到的问题是,我有很多np.nan值,我想在将它们转换为列表之前替换为空白/空白。基本上是因为当它们进入列表时,它们被替换为“nan”字符串 我只想去掉那些np.nan,并保持所有其余数据的完整性 这是我将DF转换为列表的函数: def updated_values_list(df): updated_values = df.T.reset_index()

我做了一个函数,可以将我的DF转换成一个列表,这样我就可以使用它与googleapi交互,这就是为什么它必须是一个列表的原因

我在这里遇到的问题是,我有很多
np.nan
值,我想在将它们转换为列表之前替换为空白/空白。基本上是因为当它们进入列表时,它们被替换为“nan”字符串

我只想去掉那些
np.nan
,并保持所有其余数据的完整性

这是我将DF转换为列表的函数:

def updated_values_list(df):
    updated_values = df.T.reset_index().values.T.tolist()
    return [[str(j) for j in i] for i in updated_values]

list = updated_values_list(df)
实际产出:

>> list[0]
['header1', 'header2' ... 'headern'] # this one is ok
>> list[1]
['val1', 'val2', 'nan', 'nan', ...] # my actual output
预期产出

>> list[1]
['val1', 'val2', '', '', ...] # the output I want

您可以使用方法
df.fillna
。由于您的数据似乎是数字,并且您希望用字符串替换它,因此可以执行以下操作

df = df.astype(object).fillna('')

在将整个数据帧转换为列表之前,您应该将其作为函数中的第一个命令运行。

您可以使用方法
df.fillna
。由于您的数据似乎是数字,并且您希望用字符串替换它,因此可以执行以下操作

df = df.astype(object).fillna('')

在将整个数据帧转换为列表列表之前,您应该将其作为函数中的第一个命令运行。

由于不必要的开销,对于简单的任务,Pandas方法可能非常慢。我们可以看到:-

df = pd.DataFrame({'a':[6.5]*30000 + [np.nan]*30000, 'b':[6.5]*30000 + [np.nan]*30000})

def solution1(df):
    updated_values = df.astype(object).fillna('').T.reset_index().values.T.tolist()
    return [[str(j) for j in i] for i in updated_values]

def solution2(df):
    updated_values = df.T.reset_index().values.T.tolist()
    return [[str(j) if not (not isinstance(j, str) and np.isnan(j)) else '' for j in i] for i in updated_values]
%timeit解决方案1(df)

1.92 s±96.3 ms/圈(7次运行的平均值±标准偏差,每次1圈)

%timeit解决方案2(df)


284 ms±23 ms/循环(7次运行的平均值±标准偏差,每个循环1次)

由于不必要的开销,对于简单任务,熊猫方法可能非常慢。我们可以看到:-

df = pd.DataFrame({'a':[6.5]*30000 + [np.nan]*30000, 'b':[6.5]*30000 + [np.nan]*30000})

def solution1(df):
    updated_values = df.astype(object).fillna('').T.reset_index().values.T.tolist()
    return [[str(j) for j in i] for i in updated_values]

def solution2(df):
    updated_values = df.T.reset_index().values.T.tolist()
    return [[str(j) if not (not isinstance(j, str) and np.isnan(j)) else '' for j in i] for i in updated_values]
%timeit解决方案1(df)

1.92 s±96.3 ms/圈(7次运行的平均值±标准偏差,每次1圈)

%timeit解决方案2(df)


284 ms±23 ms/循环(平均±标准偏差为7次运行,每个循环1次)

预期输出?@adirabargil给我一分钟,我将最后一行修改为
return[[str(j)if not np.isnan(j)else''for j in I]for I in更新的_值]
@adirabargil取决于你的观点,我猜。提供的答案慢得多。预期输出?@adirabargil给我一分钟,我将最后一行修改为
返回[[str(j)if not np.isnan(j)else''for j in I]for I in updated_值]
@adirabargil取决于您的观点,我猜。提供的答案要慢得多。