Python 熊猫使用mongodb存储嵌套对象
我想在mongodb中存储一个数据帧。我可以正常地这样做,但我需要添加另一列,其中的值将作为对象存储在mongodb中Python 熊猫使用mongodb存储嵌套对象,python,mongodb,pandas,Python,Mongodb,Pandas,我想在mongodb中存储一个数据帧。我可以正常地这样做,但我需要添加另一列,其中的值将作为对象存储在mongodb中 Column C: 1. { "test1": "Unknown", "test2": "Unknown" } 2. { "test1": "Unknown", "test2": "Unknown" } 我试图通过以下方式做到这一点: df['C'] = { "test1": "Unknown", "
Column C:
1. {
"test1": "Unknown",
"test2": "Unknown"
}
2. {
"test1": "Unknown",
"test2": "Unknown"
}
我试图通过以下方式做到这一点:
df['C'] = {
"test1": "Unknown",
"test2": "Unknown"
}
这给了我一个错误
ValueError: Length of values does not match length of index
稍后我将使用
records = json.loads(df.T.to_json()).values()
db.users.insert(records)
有没有办法做到这一点?我假设您的数据帧不是一行长,所以您不能为df['C']指定一个值。
您可以制作与数据帧长度相同的列表:
import pandas as pd
df = pd.DataFrame(data=list(range(5)), columns=["Sample"])
df['C'] = [{"test":"value"}]* df.shape[0]
df
Sample C
0 0 {'test': 'value'}
1 1 {'test': 'value'}
2 2 {'test': 'value'}
3 3 {'test': 'value'}
4 4 {'test': 'value'}
或使用“应用”运行填充列的函数:
df['C'] = df['Sample'].apply(lambda x: {'test{}'.format(x):'Unknown'})
df
Sample C
0 0 {'test0': 'Unknown'}
1 1 {'test1': 'Unknown'}
2 2 {'test2': 'Unknown'}
3 3 {'test3': 'Unknown'}
4 4 {'test4': 'Unknown'}
使用apply的优点是能够轻松地将现有数据从数据帧中删除到新列中。例如,这里的测试编号是从“Sample”字段传入的。哦,我明白了。那么为什么一个普通的df['C']='Unknown'可以工作呢?这可能会将所有行指定为Unknown,因为字典是可编辑的。分配一个列表也不会工作,例如df['C']=['C']。虽然字符串在技术上是一个iterable,但它与列表或字典不同,它不是一个集合。换句话说,如果您尝试将一组内容分配给pandas列,pandas会尝试对其进行迭代,并将每个值分配给一行。在您的情况下,行数多于值,因此pandas表示没有足够的内容。否问题,很高兴我能帮上忙。这只是我最好的猜测,所以如果你需要更多信息,我建议你检查一下。事实上,我甚至不知道你可以使用df['C']=“somestring”,它会将该字符串分配给列中的每一行。