当前位置: 首页 > 面试题库 >

熊猫数据框中的字符串类型的时间增量

晋言
2023-03-14
问题内容

我有一个数据框df,其第一列是timedelta64

df.info():

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 686 entries, 0 to 685
Data columns (total 6 columns):
0    686 non-null timedelta64[ns]
1    686 non-null object
2    686 non-null object
3    686 non-null object
4    686 non-null object
5    686 non-null object

print(df[0][2])例如,如果我愿意,它将给我0 days 05:01:11。但是,我不想0 days提起诉讼。我只想05:01:11打印。有人可以教我该怎么做吗?非常感谢!


问题答案:

可以通过以下方式实现:

df['duration1'] = df['duration'].astype(str).str[-18:-10]

但是解决方案并不通用,如果输入3 days 05:01:11也删除3 days

因此,解决方案只能在不到一天的时间间隔内正常工作。

更通用的解决方案是创建自定义格式:

N = 10
np.random.seed(11230)
rng = pd.date_range('2017-04-03 15:30:00', periods=N, freq='13.5H')
df = pd.DataFrame({'duration': np.abs(np.random.choice(rng, size=N) - 
                                 np.random.choice(rng, size=N)) })

df['duration1'] = df['duration'].astype(str).str[-18:-10]

def f(x):
    ts = x.total_seconds()
    hours, remainder = divmod(ts, 3600)
    minutes, seconds = divmod(remainder, 60)
    return ('{}:{:02d}:{:02d}').format(int(hours), int(minutes), int(seconds))

df['duration2'] = df['duration'].apply(f)
print (df)

         duration duration1  duration2
0 2 days 06:00:00  06:00:00   54:00:00
1 2 days 19:30:00  19:30:00   67:30:00
2 1 days 03:00:00  03:00:00   27:00:00
3 0 days 00:00:00  00:00:00    0:00:00
4 4 days 12:00:00  12:00:00  108:00:00
5 1 days 03:00:00  03:00:00   27:00:00
6 0 days 13:30:00  13:30:00   13:30:00
7 1 days 16:30:00  16:30:00   40:30:00
8 0 days 00:00:00  00:00:00    0:00:00
9 1 days 16:30:00  16:30:00   40:30:00


 类似资料:
  • 我有一个相当大的数据帧(11k行和20列)。其中一列的数据类型是混合的,主要是数字(float),其中有少量字符串分散在各处。 在使用混合列中的数据执行一些统计分析之前,我通过查询其他列来对该数据帧进行子集划分(但如果存在字符串,则无法执行此操作)。99%的时间,一旦子集这个列是纯数字的,但很少字符串值会在子集中结束,我需要捕获它。 通过Pandas混合类型列循环检查字符串(或者反过来检查整个列是

  • 问题内容: 我将Pandas’ver 0.12.0’与Python 2.7结合使用,并具有如下数据框: 该系列由一些整数和字符串组成。它在默认情况下是。我想将的所有内容转换为字符串。我试过了,产生下面的输出。 1) 如何将的所有元素转换为String? 2) 我最终将用于为数据帧建立索引。与具有整数索引相比,在数据帧中具有String索引会降低速度吗? 问题答案: 您可以将id的所有元素转换为使用

  • 问题内容: 我想查看数据框内特定列中是否存在特定字符串。 我遇到了错误 ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。 问题答案: 将返回大小为布尔值的指标向量 因此,您可以使用 或者,如果您不在乎有多少条记录与您的查询匹配

  • 问题内容: 我有一个类似于以下内容的数据框: 我希望输出为以下格式: 想要从“名称”列中删除所有数字。 我最近来的是使用以下代码在 单元 级别进行的: 任何想法如何在 系列 / 数据框 级别上以更好的方式 实现 。 问题答案: 您可以结合使用正则表达式将str.replace应用于列: 输出: 在正则表达式中代表“任何数字”,代表“一个或多个”。 因此,其含义是:“将字符串中所有出现的数字全部替换

  • 问题内容: 我开始用这个来扯头发-所以我希望有人可以帮忙。我有一个使用openpyxl从Excel电子表格创建的pandas DataFrame。产生的DataFrame看起来像: …具有以下数据类型: 问题是id列中的数字实际上是标识号,我需要将它们视为字符串。我尝试使用以下方法将id列转换为字符串: 这看起来有点丑陋,但它确实会产生类型为’object’而不是’float64’的变量: 但是,

  • 问题内容: 我想替换列中的子字符串 到。 需求输出 我尝试,但它返回。 问题答案: 使用与更换和: