如何在 Python 中移动 DataFrame 列的数字或字符串中的位置点?

How can I move the location points in numbers or strings of a DataFrame column in Python?

首先我为我糟糕的解释道歉,我真的很想把成千上万的DataFrame变成十个,因为csv上的股价数据是错误的。最后感谢@Vincent 的回复,我终于在Close 专栏解决了,虽然我认为这仍然不是最正统和干净的方式。非常感谢您的回复。

                   Open         High          Low        Close    Adj Close  \
Date                                                                          
2014-10-31    25.350000    25.350000    25.350000    25.350000    24.343254   
2015-03-31    27.299999    27.299999    27.299999    27.299999    26.215811   
2015-04-30    28.020000    28.020000    28.020000    28.020000    26.907215   
2015-06-30    27.230000    27.230000    27.230000    27.230000    26.148592   
2015-07-31    29.030001    29.030001    29.030001    29.030001    27.877106   
2015-09-30    23.059999    23.059999    23.059999    23.059999    22.144196   
2015-11-30    20.889999    20.889999    20.889999    20.889999    20.060377   
2016-02-29    16.780001    16.780001    16.780001    16.780001    16.113602   
2016-03-31    15.600000    15.600000    15.600000    15.600000    14.980463   
2016-05-31    17.070000    17.070000    17.070000    17.070000    16.392086   
2016-06-30    16.540001    16.540001    16.540001    16.540001    15.883134   
2016-08-31    17.969999    17.969999    17.969999    17.969999    17.256340   
2016-09-30    17.030001    17.030001    17.030001    17.030001    16.353674   
2016-10-31    16.250000    16.250000    16.250000    16.250000    15.604650   
2016-11-30    18.129999    18.129999    18.129999    18.129999    17.409985   
2017-01-31    18.150000    18.150000    18.150000    18.150000    17.429192   
2017-02-28    18.250000    18.250000    18.250000    18.250000    17.525223   
2017-03-10   970.000000   987.500000   970.000000   983.000000   943.961243   
2017-03-13   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-14   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-15   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-16   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-17   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-20   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-21   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-22   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-23   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-24   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-27   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-28   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-29   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-30   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-03-31   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-03   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-04   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-05   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-06   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-07   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-10   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-11   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-12   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-13   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-18   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-19   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-20   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-21   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-24   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-25   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-26   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-27   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-04-28   983.000000   983.000000   983.000000   983.000000   943.961243   
2017-05-02  1228.000000  1230.000000  1221.000000  1220.000000  1171.549072   
2017-05-03  1215.000000  1225.500000  1213.000000  1221.000000  1172.509399   
2017-05-04  1230.000000  1236.319946  1225.000000  1229.000000  1180.191650   
2017-05-05  1233.000000  1233.000000  1213.719971  1214.000000  1165.787354   
2017-05-08  1215.000000  1219.719971  1204.000000  1211.000000  1162.906494   

这是我的代码:

df = pd.read_csv('psh.csv')
df.set_index('Date', inplace=True)
df.index = pd.to_datetime(df.index)
df.ffill(inplace=True)

close = []
for i in df['Close']:
    if i > 100:
        i = i/100
    close.append(i)

df['Close'] = close

现在我有了我想要的关闭列:

             Open     High         Low      Close   
Date                        
2014-10-31  25.35   25.350000   25.350000   25.35   
2014-11-03  25.35   25.350000   25.350000   25.35   
2014-11-04  25.35   25.350000   25.350000   25.35   
2014-11-05  25.35   25.350000   25.350000   25.35   
2014-11-06  25.35   25.350000   25.350000   25.35   
... ... ... ... ... ... ...
2020-08-17  1948.00 1948.000000 1908.959961 19.30   
2020-08-18  1924.00 1930.000000 1908.000000 19.20   
2020-08-19  1916.00 1932.000000 1910.000000 19.32   
2020-08-20  1912.00 1948.000000 1912.000000 19.30   
2020-08-21  1930.00 1944.910034 1924.000000 19.42   

您只想修改文件中某些数据的值吗?我不是 CSV 方面的专家,但据我所知,你只是在操纵一个列表列表,不是吗?

所以如果你的意图是在你的最后一列中有 9.43 而不是 943,即将你最后一列的所有结果除以 100 你仍然可以尝试这个我想:

import csv
f = open('yourfile.csv')
csv_f = csv.reader(f)
for row in csv_f:
     row[5]=row[5]/100

如果您还想去掉逗号后的一些小数,可以使用 "%.3f" % row[5] 正确舍入您的数据。

这是你想要做的吗?