私信  •  关注

DYZ

DYZ 最近创建的主题
DYZ 最近回复了
2 年前
回复了 DYZ 创建的主题 » 在python中将Y-m-DH:m:S格式转换为int格式

最一致的方法(防止偶然出现奇数日期)是将列转换为datetimes,然后再转换为字符串:

pd.to_datetime(data_A.time).dt.strftime('%Y%m%d%H%M%S').astype(int)
#0    20200101000000
#1    20200101000020
#Name: time, dtype: int64

但是自从你 time 本质上是字符串,可以通过标点符号将其拆分,然后连接:

data_A.time.str.split('\W').str.join('').astype(int)
#0    20200101000000
#1    20200101000020
#Name: time, dtype: int64

第二种解决方案大约快40%。

2 年前
回复了 DYZ 创建的主题 » 如何洗牌非常大。python中带有标题的csv文件?

将文件内容复制到另一个不带标题的文件中:

with open("words.txt") as infile, open("words-nohead.txt", "w") as outfile:
    for i,line in enumerate(infile):
        if i: outfile.write(line)

然后洗牌无头文件。然后将第一个文件的第一行和无头文件复制到无序的单词中。txt(我想你可以用 sh.cat() 并删除临时文件。

实际上,这并不需要Python。仅Bash就足够了:

head -n 1 words.txt > shuffled_words.txt    
tail -n+2 words.txt | shuf >> shuffled_words.txt

记住 shuf 无论如何,还是要在内存中读取整个文件。你必须有足够的内存来存储这个文件。

4 年前
回复了 DYZ 创建的主题 » 删除冒号Python后面的数字

我会用正则表达式。用空字符串替换后跟一个或两个数字的冒号

re.sub(":\d{1,2}", "", oldtime)
#'1 pm'

或者,按冒号分隔,然后按空格分隔并组合各部分:

oldtime.split(":")[0] + " " + oldtime.split()[1]
#'1 pm'

后者只有在前面有一个空间时才起作用 下午/上午 .

list1, list2, list3 = [[test[i] for i in index ] 
                       for index in (index1, index2, index3)]
4 年前
回复了 DYZ 创建的主题 » Python-string.split()但忽略单个空格(例如单词之间)

使用正则表达式拆分两个或多个空格:

import re
re.split("\s{2,}", string)
#['ABC DEF', 'GHI JK', 'LMNO P']
4 年前
回复了 DYZ 创建的主题 » Python如何在不发生此错误的情况下发送电子邮件

你的文件被调用 email.py smtplib . 因此, 进口 你的

4 年前
回复了 DYZ 创建的主题 » 如何在python中合并同一数据帧中的行?

也许有更好的方法,但是这个解决方案可以扩展到任意数量的行。

df['order'] = df.groupby('TEAM').cumcount() + 1
df.set_index(['TEAM','order']).unstack()
#       A1      A2         
#order   1   2   1   2  
#TEAM                       
#BC     35  41  11  12  
#HC     22  27  20  70  
#TC     25  31  50  14  
5 年前
回复了 DYZ 创建的主题 » 如何在python上创建块矩阵?

这有点棘手,必须分别构造每个列,然后组合这些列:

A = np.concatenate([np.concatenate([M, M]), 
                    np.concatenate([M, M])], axis=1)
#matrix([[1, 2, 1, 2],
#        [3, 4, 3, 4],
#        [1, 2, 1, 2],
#        [3, 4, 3, 4]])
4 年前
回复了 DYZ 创建的主题 » python方法1变量嵌套字典

你可以使用 functools.reduce ,但在幕后,它使用的是迭代,并且可能不如显式迭代有效:

from functools import reduce

def foo(d, keys):
    return reduce(lambda x, y: x[y], keys, d)

foo(dct, ['hits', 'hits', 'a'])
#'b'
5 年前
回复了 DYZ 创建的主题 » python:从对象列表中删除几乎重复的内容

建立一个反向字典。由于字典键总是唯一的,因此会自然地消除重复:

l = [(1051,97),(1051,132),(1048,132),(1048,283),(1048,438)]
[(x,y) for y,x in {y:x for x,y in l}.items()]
#[(1051, 97), (1048, 132), (1048, 283), (1048, 438)]

这种解决办法不能维持秩序。

5 年前
回复了 DYZ 创建的主题 » 使用python解析以字节形式传入的api响应

响应本质上是一个csv表。将其解码为字符串并使用csv读取器(例如,来自pandas)读取:

import io
import pandas as pd
response_df = pd.read_csv(io.StringIO(response.content.decode()))
#  studentName     Dept  Env  result  Unnamed: 4
#0        abcd  science  dev    pass         NaN
#1        decf     math  dev    fail         NaN

最后一列是每行末尾有孤立逗号的结果。你可以放下它:

df.dropna(axis=1, inplace=True)
#  studentName     Dept  Env  result
#0        abcd  science  dev    pass
#1        decf     math  dev    fail
5 年前
回复了 DYZ 创建的主题 » [pandas,python];在空格分隔的数据框中保留空列

您需要一个读取固定宽度列的读取器:

pd.read_fwf(io.StringIO(raw_2))
#   A    B    C  D
#0  1  2.0  3.0  4
#1  5  NaN  6.0  7
#2  8  NaN  NaN  9

一般来说,这一程序不能保证有效。您可能需要手动指定列宽。

5 年前
回复了 DYZ 创建的主题 » 使用python从一系列日期中检查项目列表

将日期转换为 datetime 对象并进行直接比较:

from datetime import datetime as dt
FMT = "%d/%m/%Y"

[date for date in c 
 if  dt.strptime(a, FMT) 
  <= dt.strptime(date, FMT) 
  <= dt.strptime(b, FMT)]

#['01/08/2017', '20/08/2017', '21/08/2017', '22/08/2017', '23/08/2017', 
# '24/08/2017', '25/08/2017', '26/08/2017', '27/08/2017', '28/08/2017']
4 年前
回复了 DYZ 创建的主题 » python中的replace函数给出了错误的结果

dfF['Final'] = dfF['AlmostFinal']\
               .replace({'KOP|RWP|MMP': 'KOLPO'}, regex = True)