python - 如何在 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
解决方案
您是否只想修改文件中某些数据的值?我不是 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]
来正确舍入您的数据。
这是你想要做的吗?
推荐阅读
- json - 使用带有 Youtube Analytics 的 Swift 4 解码 JSON 以获取嵌套的无键数组
- syntax-highlighting - Apache Zeppelin - 重新启动笔记本后语法突出显示消失
- c++ - 这是一个有效的 C++ 包含模式吗?
- javascript - 通过 ajax 使用 Yii2 表单传递附加数据
- assembly - 为什么 Rust 编译器不能优化掉 Box::downcast 的 Err arm?
- python - 完整的 HTML 文本未打印到控制台
- javascript - 有没有办法将键设置为对象中的“第一个”键?
- java - 暂停执行直到 writeStringToFile 完成
- jenkins - 您可以使用 GitHub 源分支插件更改 jenkins 作业的工作区吗?
- sql - 确定数据库关系