首页 > 解决方案 > 如何在 Python 中移动 DataFrame 列的数字或字符串中的位置点?

问题描述

首先我为我糟糕的解释道歉,我真的想把成千上万的 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

现在我有了我想要的 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   

标签: pythonpandasdataframedecimalstock

解决方案


您是否只想修改文件中某些数据的值?我不是 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]来正确舍入您的数据。

这是你想要做的吗?


推荐阅读