我正在使用Python的pandas做一些统计工作,我有以下代码打印出数据描述(平均值,计数,中位数等).
data=pandas.read_csv(input_file)
print(data.describe())
Run Code Online (Sandbox Code Playgroud)
但我的数据非常大(大约400万行),每行都有非常小的数据.因此,不可避免地,计数会很大,而且平均值会非常小,因此Python会像这样打印它.
我只是想完全打印这些数字只是为了易于使用和理解,例如它最好是4393476代替4.393476e+06.我用Google搜索了它,我发现的最多就是在Python中显示一个带有两个小数位的浮点数以及其他一些类似的帖子.但这只有在我已经在变量中有数字时才有效.虽然不是我的情况.在我的情况下,我没有这些数字.这些数字是由describe()函数创建的,所以我不知道我会得到什么数字.
对不起,如果这看起来像一个非常基本的问题,我仍然是Python新手.任何回应都是适用的.谢谢.
如果我错了,请原谅我,但是ValueError: NaTType does not support strftime当数据为空或为空时会发生AFAIK 。但我的数据不是。
假设我有这个数据框。
df = pd.DataFrame({'personnel_number': ['123', '345', '567', '789', '000', '4444'],
'expiry_date': ['2020-12-07', '2099-12-04', '2019-08-30', '2022-03-19', '2020-09-06', '9999-12-31']})
Run Code Online (Sandbox Code Playgroud)
我想使用以下代码将其转换为日期类型格式。
for exp_date in df['expiry_date']:
date = pd.to_datetime(exp_date, errors='coerce').strftime('%Y-%m-%d')
print(date)
Run Code Online (Sandbox Code Playgroud)
但是当循环到达最后一个数据('9999-12-31'日期一)时,我总是以某种方式得到这个错误。
ValueError: NaTType does not support strftime
Run Code Online (Sandbox Code Playgroud)
我认为 9999 年听起来不合理,但这是我拥有的数据,我无法更改它。那么,我能做什么?
假设我有这样的数据。这是对某些产品的一组评论。
prod_id text rating
AB123 some text 5
AB123 some text 2
AB123 some text 4
AC456 some text 3
AC456 some text 2
AD777 some text 2
AD777 some text 5
AD777 some text 5
AD777 some text 4
AE999 some text 4
AF000 some text 5
AG222 some text 5
AG222 some text 3
AG222 some text 3
Run Code Online (Sandbox Code Playgroud)
我想知道哪个产品的评论最多(行数最多),因此我使用以下代码来获取前 3 个产品(我只需要 3 个评论最多的产品)。
s = df['prod_id'].value_counts().sort_values(ascending=False).head(3)
Run Code Online (Sandbox Code Playgroud)
然后我会得到这个结果。
AD777 4
AB123 3
AG222 3
Run Code Online (Sandbox Code Playgroud)
但我真正需要的是具有上述 id 的行。我需要所有 AD777、AB123 和 …
我有以下代码create_data()引用了我之前已经定义的函数。
%%time
from tqdm import tqdm
from multiprocessing import Pool
import pandas as pd
import os
with Pool(processes=os.cpu_count()) as pool:
results = pool.map(create_data, date)
data = [ent for sublist in results for ent in sublist]
data = pd.DataFrame(data, columns = cols)
data.to_csv("%s"%str(date), index=False)
Run Code Online (Sandbox Code Playgroud)
我基本上想create_data()在传递日期参数的同时打电话。然后获得的所有结果将被收集到results变量中。然后我会将它们全部合并到一个列表中并将其转换为数据框。该函数create_data计算量较大,计算时间较长。这就是为什么我需要进度条来查看进程。
我尝试将该行更改为以下内容。
results = list(tqdm(pool.map(create_od, date), total = os.cpu_count()))
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。我已经等了很长一段时间了,没有进度条出现。我在这里该怎么办?