8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

有没有办法选择将数据框上传到 CSV 的哪个单元格/列,就像将数据抓取到 Excel 文件中一样?

FishingIsLife 3月前

56 0

我曾经有过将数据从网络抓取到 Excel 文件的经验,并且我知道,将数据复制到 Excel 电子表格中时,可以选择将其复制到哪一列。(如图所示,startcol = 10...

我曾有过将数据从网络抓取到 Excel 文件的经验,并且我知道在将数据复制到 Excel 电子表格中时,您可以选择将其复制到哪一列。( startcol = 10 如下面的代码片段所示)

with pd.ExcelWriter("jockeyclub.xlsx", engine="openpyxl", mode='a', if_sheet_exists='overlay') as writer:
                    df.to_excel(writer, sheet_name="data", index=False, startcol=10)

但是,当将数据上传到 csv 文件时,我的所有数据框都会进入同一列,这使其成为一个非常长的列。有没有办法选择将每个数据框上传到 CSV 文件的哪一列?

这是我用于将数据上传到 CSV 的代码。

df.to_csv('/Users/nicholaschan/Desktop/data.csv', mode='a', index=False, header=False)
帖子版权声明 1、本帖标题:有没有办法选择将数据框上传到 CSV 的哪个单元格/列,就像将数据抓取到 Excel 文件中一样?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由FishingIsLife在本站《pandas》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 你的术语令人困惑。你不是在上传数据,而是将数据框保存到文件中,在本例中,通过在末尾添加行来保存。这将添加更多行,但不会增加更多列。高度抽象的函数,如

  • 如果你阅读 文档 ,你会看到有一个选项,columns=[]:

    df.to_csv('/Users/nicholaschan/Desktop/data.csv', columns=['Name','Street','City'], mode='a', index=False, header=False)
    

    你必须调整列名称!

  • 让我们考虑这个数据框:temp = pd.DataFrame({'x': [['ab', 'bc'], ['hg'], np.nan]})temp x0 [ab, bc]1 [hg]2 NaNI 想创建一个名为 dummy 的新列,它采用以下值……

    让我们考虑这个数据框:

    temp = pd.DataFrame({'x': [['ab', 'bc'], ['hg'], np.nan]})
    temp
    
        x
    0   [ab, bc]
    1   [hg]
    2   NaN
    

    我想创建一个名为 的新列, dummy 如果某行在其任何元素中包含字母“a”,则取值为 1;如果不包含字母“a”,则取值为 0;如果为 NaN,则取值为 NaN。

    预期结果:

        x         dummy
    0   [ab, bc]   1
    1   [hg]       0
    2   NaN        NaN
    

    听起来很简单,但我被难住了。我尝试过:

    1)

    temp['dummy'] = np.where(temp.x.str.contains('a', case = False, na = False), 1, 0)
    

    将分配所有 0,因为它将整个列表与 'a' 进行比较

    2)

    temp['dummy'] = np.where(temp.x.astype(str).str.contains('a', case = False, na = False), 1, 0)
    

    atype(str) 将通过将列表展平为字符串来解决上述问题,但现在 np.NaN 是“nan”并且 na = False 不起作用。

    3)

    temp['dummy'] = np.where(all([temp.x.astype(str).str.contains('a', case = False, na = False) , temp.x.astype(str) != 'nan']), 1, 0)
    

    我认为我的第二个条件应该解决上述问题,但现在我收到错误: ValueError: The truth value of a Series is ambiguous.

    4)

    temp['dummy'] = [1 if all(['a' in y , y != np.nan]) else 0 for y in temp.x ]
    

    错误: TypeError: argument of type 'float' is not iterable

    5)

    唯一可行的方法是:

    temp['dummy'] = np.nan # placeholder
    temp['dummy'][temp.x.notnull()] = np.where(temp[temp.x.notnull()].x.astype(str).str.contains('a', case = False, na = False), 1, 0)
    temp
    

    但它只有两条线,而且很丑。

  • 由于 pandas 不是设计用于嵌套组件的,因此请使用列表推导:

    from collections.abc import Iterable
    
    temp['dummy'] = [int(any('a' in item for item in x))
                     if isinstance(x, Iterable)
                     else x for x in temp['x']]
    

    变体(可能不一定更快):

    m = temp['x'].notna()
    
    temp.loc[m, 'dummy'] = [int(any('a' in item for item in x))
                            for x in temp.loc[m, 'x']]
    

    或者采用纯 pandas 方法,使用 explode , str.contains 并使用 groupby.any :

    temp['dummy'] = (temp['x'].explode()
                     .dropna()
                     .str.contains('a')
                     .groupby(level=0).any()
                     .astype(float)
                    )
    

    输出:

              x  dummy
    0  [ab, bc]    1.0
    1      [hg]    0.0
    2       NaN    NaN
    

    时间安排

    其中随机包含以下项 [['ab', 'bc'], ['hg'], np.nan]

    enter image description here

    包含 100 个项目和 NaN 的随机项目列表:

    enter image description here

    在这种情况下,纯 pandas 方法速度较慢,因为它无法从短路中获益,例如 any .

  • 谢谢。我最喜欢中间方法。我不知道您可以在使用 loc 的同时创建一个新的数据框列,就像在 temp.loc[m, 'dummy'] 中一样(我认为列需要先存在,然后才能对其进行索引)

  • 我注意到开发人员控制台中出现消息“显示临时标头”,如下图所示。除了此消息外,它还显示 CORS 错误。Web 应用程序基于 Angula 构建...

    我注意到开发人员控制台中的消息“显示临时标题”,如下图所示。除了此消息外,它还显示 CORS 错误。Web 应用程序基于 Angular 构建,后端编码为 .NET core 2.2。对于 CORS,在 starup.cs 中添加了以下代码

     public IServiceProvider ConfigureServices(IServiceCollection services)
            {
                services.AddCors(
                    options => options.AddPolicy(
                        "localhost",
                        builder => builder
                            .WithOrigins(
                                _appConfiguration["http://localhost:4200,http://localhost:21021"]
                                    .Split(",", StringSplitOptions.RemoveEmptyEntries)
                                    .Select(o => o.RemovePostFix("/"))
                                    .ToArray()
                            )
                            .AllowAnyHeader()
                            .AllowAnyMethod()
                            .AllowCredentials()
                    )
            }
    
     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                app.UseCors("localhost");
            }
    

    enter image description here

  • 打字稿中的 npmnpm 错误!代码 EEXISTnpm 错误!系统调用 mkdirnpm 错误!路径 /Users/ketaki_2004./.npm/_cacache/content-v2/sha512/of/cenpm 错误!错误 EEXISTnpm 错误!尝试时响应主体无效。

    npm 我 typescript

    npm 错误!代码存在

    npm ERR!系统调用 mkdir

    npm ERR!路径/Users/ketaki_2004./.npm/_cacache/content-v2/sha512/af/ce

    npm 错误!错误存在

    npm ERR!尝试获取 https://registry.nporg/typescript :EACCES:权限被拒绝,mkdir '/Users/ketaki_2004./.npm/_cacache/content-v2/sha512/af/ce'

    npm ERR!文件存在:/Users/keta./.npm/_cacache/content-v2/sha512/af/ce

    npm ERR!删除现有文件并重试,或运行 npm

    npm ERR! 用 --force 不计后果地覆盖文件。

    在我的 macos m2 上下载并安装用于 angular js 的 typescript

  • /Users/ketaki_2004./.npm/_cacache/content-v2/sha512/af/ce 下有什么?这些路径中是否有一个可能是 npm 期望创建目录的文件?您可以尝试重命名一些缓存,或者(如果您确定的话)删除它吗?

  • 您可以使用以下方式授予文件夹权限:

    sudo chown -R $USER /Users/ketaki_2004./.npm
    

    然后尝试删除可能由于部分安装而损坏的现有文件,方法是 --force 按照错误消息的建议或 rm -rf /Users/ketaki_2004./.npm

返回
作者最近主题: