小编Pab*_*blo的帖子

有效地将列中的值替换为另一列Pandas DataFrame

我有一个像下面这样的Pandas DataFrame:

   col1 col2 col3
1   0.2  0.3  0.3
2   0.2  0.3  0.3
3     0  0.4  0.4
4     0    0  0.3
5     0    0    0
6   0.1  0.4  0.4
Run Code Online (Sandbox Code Playgroud)

我希望仅在值等于0 col1时将值替换为第二列(col2)中的col1值,并且在(对于剩余的零值)之后,再次使用第三列(col3)进行替换.期望的结果是下一个:

   col1 col2 col3
1   0.2  0.3  0.3
2   0.2  0.3  0.3
3   0.4  0.4  0.4
4   0.3    0  0.3
5     0    0    0
6   0.1  0.4  0.4
Run Code Online (Sandbox Code Playgroud)

我使用该pd.replace功能做到了,但它似乎太慢了......我认为必须是一种更快的方法来实现它.

df.col1.replace(0,df.col2,inplace=True)
df.col1.replace(0,df.col3,inplace=True)
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?使用其他功能而不是pd.replace功能?

python replace dataframe pandas

9
推荐指数
2
解决办法
2万
查看次数

有效地将Pandas数据帧写入Google BigQuery

我正在尝试pandas.DataFrame使用此处pandas.DataFrame.to_gbq()记录的功能上传到Google大查询.问题是,直接上传到Google云端存储GUI需要不到一分钟的时间需要2.3分钟.我正计划上传一堆数据帧(~32),每个数据帧都有相似的大小,所以我想知道它是什么更快的选择.to_gbq()

这是我正在使用的脚本:

dataframe.to_gbq('my_dataset.my_table', 
                 'my_project_id',
                 chunksize=None, # i've tryed with several chunksizes, it runs faster when is one big chunk (at least for me)
                 if_exists='append',
                 verbose=False
                 )

dataframe.to_csv(str(month) + '_file.csv') # the file size its 37.3 MB, this takes almost 2 seconds 
# manually upload the file into GCS GUI
print(dataframe.shape)
(363364, 21)
Run Code Online (Sandbox Code Playgroud)

我的问题是,什么更快?

  1. Dataframe使用pandas.DataFrame.to_gbq()功能上传
  2. 保存Dataframe为csv,然后使用Python API作为文件上传到BigQuery
  3. 保存Dataframe为csv,然后使用此过程将文件上载到Google Cloud Storage ,然后从BigQuery中读取它

更新:

替代方案2,使用pd.DataFrame.to_csv() …

python pandas google-cloud-storage google-bigquery google-cloud-python

9
推荐指数
2
解决办法
8268
查看次数

pandas.read_html不支持小数逗号

我正在使用xlm文件pandas.read_html并且工作几乎完美,问题是该文件使用逗号作为十进制分隔符而不是点(默认值read_html).

我可以轻松地在一个文件中用点替换逗号,但我有近200个具有该配置的文件.与pandas.read_csv您可以定义小数点分隔符,但我不知道为什么pandas.read_html你只能定义千个分隔符.

在这个问题的任何指导?,还有另一种方法可以在大熊猫开放之前自动进行逗号/点替换吗?提前致谢!

python decimal pandas xlm

7
推荐指数
2
解决办法
1436
查看次数

python multiprocessing-OverflowError('无法序列化大于4GiB的字节对象')

我们正在使用multiprocessing库(python 3.6)运行脚本,其中将big pd.DataFrames作为参数传递给函数:

from multiprocessing import Pool
import time 

def my_function(big_df):
    # do something time consuming
    time.sleep(50)

if __name__ == '__main__':
    with Pool(10) as p:
        res = {}
        output = {}
        for id, big_df in some_dict_of_big_dfs:
            res[id] = p.apply_async(my_function,(big_df ,))
        output = {u : res[id].get() for id in id_list}
Run Code Online (Sandbox Code Playgroud)

问题是我们从pickle库中得到一个错误。

原因:“ OverflowError('无法序列化大于4GiB的字节对象',)”

我们知道pickle v4可以序列化更大的对象相关的问题链接,但是我们不知道如何修改所multiprocessing使用的协议。

有人知道该怎么办吗?谢谢 !!

python pickle pandas python-multiprocessing

5
推荐指数
1
解决办法
3640
查看次数

在google composer中删除DAG - Airflow UI

我想从Airflow UI中删除DAG,该GCS/dags文件夹中不再提供.我知道Airflow有一种"新"方法可以使用airflow delete_dag my_dag_id命令从数据库中删除dag ,见/sf/answers/3477848041/

似乎在composer airflow版本中,该delete_dag命令尚不支持.

不要试试这个: 我也试过使用airflow resetdb,气流用户界面就死了

有没有办法删除当前不在gs://BUCKET/dags/文件夹中的dags ?

airflow google-cloud-composer

3
推荐指数
1
解决办法
1413
查看次数