Python 转换列表列表中的pd.DataFrame,同时替换';np.nan';空文本的值'';
我做了一个函数,可以将我的DF转换成一个列表,这样我就可以使用它与googleapi交互,这就是为什么它必须是一个列表的原因 我在这里遇到的问题是,我有很多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()
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取决于您的观点,我猜。提供的答案要慢得多。