如何更改DataFrame中值的长度

时间:2019-07-09 18:29:24

标签: python pandas

我有一个包含一列的数据框:

    close
0   176.380
1   176.290
2   176.740
3   177.200
4   177.600
5   177.270
6   177.190
7   177.660
8   177.890
9   177.450
10  177.185

此列中的值(类型=浮点数)的长度不同。我想让所有值都具有相同的长度(6)。但是我该怎么做?

我已经尝试过:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import sqlite3 

conn = sqlite3.connect("demo.db")
cur = conn.cursor()
rawdata_set = pd.read_sql('SELECT close FROM tbl_data', conn)

training_set = rawdata_set.head(100) 
for valid in training_set:
    count = 0
    if len(str(valid)) == 7:
        valid = int(str(training_set)[:6])
        count += 1

预期结果是值的长度全部为6,但是结果是我看不到任何变化。也许我正在使它变得比它应该的复杂。

    close
0   176.38
1   176.29
2   176.74
3   177.20
4   177.60
5   177.27
6   177.19
7   177.66
8   177.89
9   177.45
10  177.18

2 个答案:

答案 0 :(得分:2)

您可以使用apply方法和字符串格式将特定的float列转换为字符串列。

s = pd.Series(np.random.rand(10))

s
Out[6]: 
0    0.087582
1    0.896488
2    0.560789
3    0.298119
4    0.612291
5    0.750120
6    0.009479
7    0.449085
8    0.497474
9    0.342821

s.apply('{:.2f}'.format)

Out[9]: 
0    0.09
1    0.90
2    0.56
3    0.30
4    0.61
5    0.75
6    0.01
7    0.45
8    0.50
9    0.34
dtype: object

答案 1 :(得分:0)

您只需要实际更改不使用的数据集即可。 valid只是一个变量,它具有与您当前所在位置相同的数字:

training_set = rawdata_set.head(100) 
for ind, valid in enumerate(training_set):
    count = 0
    if len(str(valid)) == 7:
        training_set.iloc[ind] = float(str(training_set)[:6])
        count += 1