小编Don*_*nRK的帖子

从 python 中的临时目录读取:TypeError: expected str, bytes or os.PathLike object, not TemporaryDirectory

我在 python 中创建了一个临时目录,我在其中保存了一堆 .png 文件供以后使用。我的代码在我需要访问这些 .png 文件之前似乎工作正常 - 当我这样做时,我收到以下错误:

TypeError: expected str, bytes or os.PathLike object, not TemporaryDirectory
Run Code Online (Sandbox Code Playgroud)

当我在 os.path.join 中传递临时目录时抛出错误:

import os
import tempfile

t_dir = tempfile.TemporaryDirectory()
os.path.join (t_dir, 'sample.png')

Traceback (most recent call last):
  File "<ipython-input-32-47ee4fce12c7>", line 1, in <module>
    os.path.join (t_dir, 'sample.png')

  File "C:\Users\donna\Anaconda3\lib\ntpath.py", line 75, in join
    path = os.fspath(path)

  TypeError: expected str, bytes or os.PathLike object, not TemporaryDirectory
Run Code Online (Sandbox Code Playgroud)

但是,使用 gettempdir() 似乎工作正常。

import os
import tempfile
t_dir = tempfile.gettempdir()
os.path.join (t_dir, 'sample.png')
Run Code Online (Sandbox Code Playgroud)

python 文档建议 tempfile.TemporaryDirectory 使用与 …

python windows filepath temporary-files

8
推荐指数
1
解决办法
2720
查看次数

如何获取pandas数据帧对象值的模式?

我有一个pandas.DataFrame包含很多列.我只对其中type ='object'的那些列('names')感兴趣.我想回答有关此专栏的三个问题:

  1. 除了纳米值之外,最常出现的值是什么?

  2. 有多少值符合该标准(答案#1中的值计数)?

  3. 这些值多久出现一次?

我从一个大型数据帧(df)开始.我感兴趣的专栏叫做'名字'.首先,我使用collection.Counter来获取'names'列中每个唯一值的出现次数:

In [52]: cntr = collections.Counter([r for i, r in df['names'].dropna().iteritems()])
Out[52]: Counter({'Erk': 118,
    'James': 120,
    'John': 126,
    'Michael': 129,
    'Phil': 117,
    'Ryan': 126})
Run Code Online (Sandbox Code Playgroud)

然后我将Counter转换回数据帧:

In [53]: df1 = pd.DataFrame.from_dict(cntr, orient='index').reset_index()
In [54]: df1 = df1.rename(columns={'index':'names', 0:'cnt'})
Run Code Online (Sandbox Code Playgroud)

这给了我一个包含以下内容的pandas数据框:

In [55]: print (type(df1), df1)
Out[55]: <class 'pandas.core.frame.DataFrame'>
       names    cnt
    0      Erk  118
    1    James  120
    2     Phil  117
    3     John  126
    4  Michael  122
    5     Ryan  126
Run Code Online (Sandbox Code Playgroud)

下一部分是我需要一些帮助的地方.我在这个例子中的期望输出是:

答案#1 = [John,Ryan]

答案#2 = 2 …

python counter dataframe python-3.x pandas

6
推荐指数
1
解决办法
1132
查看次数

如何从 Pandas 数据帧在 MySQL 数据库中创建新表

我最近从使用 SQLite 来满足我的大部分数据存储和管理需求过渡到 MySQL。我想我终于安装了正确的库来使用 Python 3.6,但现在我无法从 MySQL 数据库中的数据帧创建新表。

这是我导入的库:

import pandas as pd
import mysql.connector
from sqlalchemy import create_engine
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我首先从 CSV 文件创建一个数据框(这里没有问题)。

def csv_to_df(infile):
    return pd.read_csv(infile)
Run Code Online (Sandbox Code Playgroud)

然后我使用这个 def 函数建立到 MySQL 数据库的连接:

def mysql_connection():
    user = 'root'
    password = 'abc'
    host = '127.0.0.1'
    port = '3306'
    database = 'a001_db'
    engine = create_engine("mysql://{0}:{1}@{2}:{3}/{4}?charset=utf8".format(user, password, host, port, database))
    return engine
Run Code Online (Sandbox Code Playgroud)

最后,我使用 pandas 函数“to_sql”在 MySQL 数据库中创建数据库表:

def df_to_mysql(df, db_tbl_name, conn=mysql_connection(), index=False):
    df.to_sql(con = conn, name = db_tbl_name, if_exists='replace', index = False)
Run Code Online (Sandbox Code Playgroud)

我使用这一行运行代码:

df_to_mysql(csv_to_df(r'path/to/file.csv'), 'new_database_table') …
Run Code Online (Sandbox Code Playgroud)

python mysql dataframe pandas python-3.6

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