Python 如何替换tablib数据集中的值?
我正在使用库,希望用另一个值替换具有某个值的所有条目。Python 如何替换tablib数据集中的值?,python,replace,Python,Replace,我正在使用库,希望用另一个值替换具有某个值的所有条目。数据集对象似乎不支持此操作。实现这一点的最佳方法是什么?我的解决方案是在导出为字符串的数据集上调用Python的stringreplace方法,然后将字符串加载回新的数据集。要重新加载字符串,需要将其保存为内存中的流。应该可以使用更高级的字符串替换技术,如正则表达式 以下是一个例子: import tablib import io # Creating an example dataset. data = tablib.Dataset()
数据集
对象似乎不支持此操作。实现这一点的最佳方法是什么?我的解决方案是在导出为字符串的数据集上调用Python的stringreplace
方法,然后将字符串加载回新的数据集。要重新加载字符串,需要将其保存为内存中的流。应该可以使用更高级的字符串替换技术,如正则表达式
以下是一个例子:
import tablib
import io
# Creating an example dataset.
data = tablib.Dataset()
data.headers = ('first_name', 'last_name')
data.append(('John', 'Adams'))
data.append(('George', 'Washington'))
print(data.csv)
# Calling replace() on the formatted string and store it in a stream.
stream = io.StringIO(data.csv
.replace('George', 'Donald')
.replace('Washington', 'Trump'))
new_data = tablib.Dataset().load(stream.read(), format='csv')
print(new_data.csv)
尽管这个解决方案看起来有点“黑客”,而且这个示例也很无聊,但它似乎是可行的。您可以使用标记创建子集,或者使用第二个中间数据集。
.height
为您提供行数,.lpop()
返回并删除作为元组的第一行,.append()
将行添加回去,.stack()
将两个数据集合并在一起。您可以对提取的元组正常运行测试或代码
import tablib
data = tablib.Dataset()
data.headers = ('first_name', 'last_name')
data2 = tablib.Dataset()
data2.headers = ('first_name', 'last_name')
data.append(('John', 'Adams'))
data.append(('George', 'Washington'))
for x in range(0, data.height):
col1, col2 = data.lpop()
if col2 == 'Adams':
col2 = "Eves"
data2.append((col1, col2))
data = data.stack(data2)
这种方法使用tablib,避免了加载第二次导入